1

ページに次の要素があり、JavaScriptMVCフレームワークから動的に追加されたIDを取得します。

<input data-bind="attr: { id: attributeName }" type="text" />

要素がページ上で動的にレンダリングされると、結果のHTMLは次のようになります。

<input id="job_title" data-bind="attr: { id: attributeName }" type="text" />

しかし、入力ボックスの機能をクリックしようとすると、機能しません。(ただし、同じコードが既存の入力要素で機能します)。

$("#job_title").click(function() {
    alert('hi');
});

上記のコードは、入力要素が動的な「id」属性を使用してページに動的に追加された場合は機能しないようです。この要素をknockout.jsforeachループのページに追加していますが、それが重要かどうかはわかりません。他の誰かがこれに遭遇しましたか?

これが実際のコードです...これを置き換えるために$( "body")。on()メソッドをシミュレートするにはどうすればよいですか?

 $("#job_title").typeahead({
    source: searchFunction,        
    onselect: function(obj) {            
    }
 });
4

3 に答える 3

2

あなたは試してみたいかもしれません:

$("body").on("click", "#job_title", function() { alert('hi'); });

要素を動的に追加しているため、これは機能clickしないはずです。

于 2012-06-14T15:55:33.157 に答える
1

私はそのようなカスタムノックアウトバインダーを書くことをお勧めします

ko.bindingHandlers.typehead = {
    init: function(e){
        $(e).typeahead({
            source: searchFunction,        
            onselect: function(obj) {            
            }
         });
    }
};

次に、他のノックアウトバインダーと同じようにバインダーを適用します

<input id="job_title" data-bind="attr: { id: attributeName }, typehead:true" type="text" />
于 2012-06-14T17:03:34.133 に答える
0

クリックデータバインドを使用してみませんか?何かのようなもの:

<input data-bind="attr: { id: attributeName }, click: functionToCall" type="text" />

これにより、最初にデータバインディングを使用する主な利点の1つであるDOM操作から抽象化することができます。その関数を、コンテキストに動的に反応できるビューモデルのプロパティから取得することもできます。

于 2012-06-14T16:31:33.157 に答える