折りたたみ可能なコンテンツを表示/非表示するために、ブートストラップ折りたたみプラグインに接続されたクリック可能なdivがあります。このdivの中には、ノックアウトサブミットハンドラを持つフォームがあります。フォームのsubmit-buttonをクリックすると、knockout submit-handlerの前にcollapseのクリックハンドラが呼び出されます。私の理解のようクリックハンドラがネストされたノックアウトフォーム送信ハンドラの前に呼び出される
<div data-toggle="collapse" data-target="#collapse1">
...
<form data-bind="submit: submitForm">
<input type="number" />
<input type="submit" />
</form>
</div>
<div class="collapse" id="collapse1">
...
</div>
、崩壊のクリックハンドラは(あなたが崩壊データ-APIを見ている場合)の文書にバインドされ、ノックアウト提出-ハンドラはフォーム要素にバインドされています。送信ボタンをクリックするか(または入力でEnterキーを押す)、送信イベントが送信ハンドラに最初に到達すべきではありませんか?フォームの時点では、原点から最も近い親ですか?
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e){
...
})
私の質問:ノックアウトが提出ハンドラを前はなぜ崩壊のクリックハンドラが呼び出されましたか?
は、より良い例えばjsfiddle参照:https://jsfiddle.net/knekk/oocxfgmq/
私は申し訳ありませんが、それは私でした古いフィドルバージョン。私はjsfiddleを更新しました。また、divをクリックすると折り畳みを開くことができるはずです。私の質問は、なぜサブミットイベントがクリックイベントの後に発生するのかです。 – Knekki
IE <9以外のすべてのブラウザでは、2つのステージのイベント処理があります。 イベントが最初にダウンします。これはキャプチャと呼ばれ、その後バブルアップします。この動作は、W3C仕様では標準化されています。 W3C要素イベントは がダウンキャプチャ注文 - >「子」 - - >「グランド・チャイルド」 バブルアップ - 「グランド・チャイルド」を通して - >「子」 - 「親」を通じて>「親」 –
はい確かに、その後、最初にサブミットハンドラを呼び出すべきではないでしょうか?最初の提出の最も近い親として/クリック?折りたたみプラグインを見ると、clickハンドラはdivにではなくドキュメントにアタッチされますか? submitイベントが発生する前にクリックイベントが発生してドキュメントに到達していますか? – Knekki