2009-09-29 28 views
14

私はjqueryを初めて使用しています。オートコンプリートで動的にテキストボックスを生成する必要があるWebページで作業しています。動的に生成されたテキストボックスのjquery auto complete

いくつかの静的コンテンツで$("#some").autocomplete(data);をテストしたところ、完全に機能しました。

しかし、動的に生成されたテキストボックスで同じテクニックを試してみると、うまくいきません。私はウル助けを借りてこれを行っています

$(function() { 

    $("#button_newproduct").click(function(){ 
    $("#products_table > tbody").append(
     "<tr><td><input type='text'name='td_products["+counter+"]'/></td></tr>"); 
    }); 
    var data = "Core celectors cttributes craversing canipulation CSS cvents cffects cjax ctilities".split(" "); 
    $('input[name^=td_products]').autocomplete(data); 
}); 

おかげでみんなを次のように

私のコードが見えます。

今、別の問題です。私はここに

DwrService.populateProducts(someFunc); 
function someFunc(result){ 
    autoProducts=result; 
    input.autocomplete(result); 
} 

以下DWRのcall.asで配列(オートコンプリートへの入力)をロードしています問題は、配列を取得するためにDBにDWR呼び出しを行う毎回です!

DWRから配列をグローバル変数に格納する方法はありますか?

よろしく

+0

もう一度 私はdwrコールを使用して配列を入力しています: DwrService.populateProducts(someFunc); 関数someFunc(結果){ autoProducts = result; \t \t \t \t \t \t input.autocomplete(result); } dwr関数を呼び出すたびに問題が発生します。 dwrの呼び出し結果をあいまいな変数に格納することは可能ですか? –

答えて

11

主な問題は、あなたがクリックハンドラの外でオートコンプリートを呼び出していることです。したがって、ボタンがクリックされたときではなく、ページが読み込まれたときにオートコンプリートが設定されます。

は読むためにコードを変更し、これを解決するには、次の
$(function() { 

    $("#button_newproduct").click(function() { 

     var newItem = $("<tr><td><input type='text'name='td_products["+counter+"]'/></td></tr>"); 

     $("#products_table > tbody").append(newItem); 

     var data = "Core celectors cttributes craversing canipulation CSS cvents cffects cjax ctilities".split(" "); 
     newItem.find('input').autocomplete(data); 

    }); 
}); 

は今自動補完を開始時に、むしろ何度も、それぞれの新しいアイテムに設定されています。

+1

私はこれが_entire_の問題であるとは確信していません(空白についてのkarim79のポイントも重要かもしれません)が、これは間違いなく_key_問題です。 autocompleteを必要とする要素は、 'autocomplete'が呼び出されたときにクリックが発生していないので存在しません。 –

+0

入力要素がページに追加された場合、空白は問題になりませんか? – Kazar

+0

素晴らしい、完全に私は返信のスピードで驚いた 私はオーバーフローに新しいです ありがとう、ありがとう。 –

1

いくつかの考え:

  • カウンタ初期化されますか?
  • 何も一致するからあなたstartsWith属性フィルタを妨げている可能性のあることを、 「タイプ」と、あなたの 入力タグの「名前」の属性、<input type='text' name='td_products... >の間にスペースを残してみてください。
+0

私はちょうどいくつかのサンプルコードを与えましたが、これらのものはすべて私のコードに完全に入れられています –

+0

@sangram - 私は@Kazarが主な問題を見つけたと思っています。 – karim79

0

#button_newproductをクリックしたときに新しい入力を追加していますが、機能内でクリックの外側にオートコンプリートを1回追加するだけです。

チェックjqueryのlive

+2

Liveはオートコンプリートでは機能しません。イベントでのみ動作します。 – Kazar

+1

ああ、もちろん、私は何かの理由で私はオートコンプリートよりもむしろ「クリック」に追いついてしまった。 – Steerpike

5

あなたはそれを追加すると、各要素にオートコンプリートハンドラを追加する必要があります。ドキュメントの読み込み時にそれを適用するときに存在しない要素は、それ以外の場合は適用されません。また、行を作成して別々に入力する方がよいでしょう。これを行うことで、新しく作成された入力への参照を使用し、オートコンプリート・プラグインでそれを使用することができます。

$(function() { 

    $("#button_newproduct").click(function(){ 
     var input = $("<input type='text' name='td_products["+counter+"]' />"); 
     var row = $('<tr />').append($('<td />').append(input)); 
     $("#products_table > tbody").append(row); 
     var data = "Core celectors cttributes craversing canipulation CSS cvents cffects cjax ctilities".split(" "); 
     input.autocomplete(data); 

    }); 
}); 
+0

ありがとう、それは働いた。 –

+0

ありがとうございました。「あなたが追加するごとに、各要素にオートコンプリートハンドラを追加する必要があります。」この行は私に多くの助けになります。 –

1

最も簡単な方法は、使用することです。

$(".some").autocomplete({source: data}); 

新しい要素を生成するJavaScript関数内。

関連する問題