クリック ハンドラーが起動しない理由は、要素に適用されていないためです。したがって、jquery でこれを行うと、次のようになります。
$('.some-class').on('some-event', someFunction);
次に、ハンドラーをそのイベントにバインドするには、まず jQuery が$('.some-class')
セレクターを見つける必要があります。あなたの場合、#btnParse
イベントをバインドするときにノックアウトによってまだページにレンダリングされていない可能性があります。または、元の要素がレンダリングされ、破棄されてから、別の要素がレンダリングされる可能性もあります。この 2 番目のシナリオでは、イベント ハンドラーはボタンに残りません。1 つの代替手段 (これはお勧めしません) は、ハンドラーを DOM のdocument
上位 (レベルなど) にバインドし、イベントを id を持つもののイベントのみにフィルター処理することです#btnParse
。
$(document).on('click', '#btnParse', function () { console.log('hi'); });
それをお勧めしない理由は、ノックアウトの練習が悪いためですclick
。他の投稿で提案されているように、バインディングを使用する必要があります。また、id 属性を使用していますが、テンプレート化された動的コンテンツでは一般的には良い考えではありません。一意の静的要素に id が絶対に必要でない限り、クラスを使用してください。
ノックアウトのクリック バインディングを適切に使用する方法については、1 つの注意が必要なことは、ノックアウトがどのようにスコーピングを行うかを理解する必要があるということです。たとえば、ループ内でクリックをバインドしていて、メイン ビュー モデルからハンドラーが必要な場合は、ループによってコンテキストが変更されるため、親スコープを参照する必要があります。
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction"></a>
<!-- /ko -->
さらに、ハンドラーが実行する Javascript コンテキスト ( this
) を変更する必要がある場合は、次のようにクリック ハンドラーをバインドする必要があります。
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction.bind($parent)"></a>
<!-- /ko -->
そのようなもので少し遊んで、まだ混乱している場合は、新しい質問をしてください. 幸運を!