2012-01-04 26 views
0

これは以前に尋ねられたが、私はバインドのようなものだと申し訳ありません。ユーザーが特定のHTMLテキスト入力にフォーカスしたときにフォーム入力を動的に追加するJavaScript関数を作成しています(複数の値を受け入れるオプションがあるため)。私は、ドロップダウンメニューから必要な入力量を選択するよりも、この方法をとる方が簡単だと考えました。ここでJQueryが更新されない:動的に追加された要素の最後のフィルタ

は、私は新しいフォームの入力を追加して行く方法です。

$("input[type=text]").filter(":regex(id, roe[0-9])").filter(":last").on("focus", function() { 
    // Add in new elements here 
} 

私はページを更新し、「roe0」のIDとその初期のテキスト入力に焦点を当てた場合、jQueryのは、単に新しい入力を生成し、私はそれをどのようにしたいですか?しかし、新しく生成された入力に注目すると、何も起こりません。私は新しいテキスト入力を生成するために元の$(#roe0)入力に焦点を当てなければなりません。

誰にも解決策がありますか?すべての助けが大いに評価されるでしょう!

答えて

1

これは、1つの要素(ページが最後にロードされたとき)を選択し、それにイベントハンドラをアタッチしていることです。それ以外は何も行われないので、作成する新しい要素にはそのイベント処理が含まれないことになります。新しい要素を作成するとき、あなたはそれに同じイベントハンドラを添付している、

function createNewElement(e) { 
    var newElement = jQuery('<input />'); 
    // Whatever logic you have to append the new input and such 
    newElement.one("focus", createNewElement); 
} 

$("input[type=text]").filter(":regex(id, roe[0-9])").filter(":last").one("focus", createNewElement); 

この方法:私はどうなるのか

はこのようなものです。

もう1つの答えで述べたように、onの代わりにoneを使用するとよいでしょう。多くの意味を作る

2

適用時に1回だけ適用され、最後の要素に適用されます。新しく作成された要素に再適用する必要があります。ここでは、jQuerys .one()イベントバインダーを使用すると良い状況になります。イベントが最初に(一度)発生すると、要素上のバインドを削除することが必須です。

+0

ああ、(新しい要素は今のイベントハンドラを持つものでなければならないので、良いですが)それはそれは一度だけ実行されます後はイベントハンドラをデタッチします。私は前に '.one()'イベントについて知りませんでしたが、私の必要とまったく同じように思えます。あなたの答えをありがとう! –

関連する問題