2012-01-25 2 views
0

こんにちはStackOverflowの、イベントは、そのはjQueryの

を使用してプログラムで追加入力でトリガしません。私は、コントロールの後にイベントをトリガーする方法があるかどうかを知りたいのですが(この場合の入力テキストボックス)がありますjQueryを使用してプログラムで追加されました。つまり、テーブルのjquery.after()を使ってテーブルにsと入力でいっぱいの行を追加し、この新しい行のコントロールはイベントをトリガーしません。

私は本当にこの1つの助けが必要です、私は "グーグル"の多くの後にそれを把握することができなかったと私はそれ以上苦労することはできません。いくつかの助けは本当に感謝されるでしょう。

十分明確でない場合は、質問をより明確にすることを忘れないでください。予想

EDIT(ここで私は、行を追加するために行うものです)

$(".prodNum").on("change", function(){ 
       //Envoie le sku du produit au serveur et affiche les infos lorsque le produit est valide 
       $.post("../PHP/caisse.php", {productSku : $(this).val()}, 
        function(data){ 
         var total = 0; 
         var jsonObj = $.parseJSON(data); 
         var newRow = ""; 

         if(typeof jsonObj.message !== "undefined") 
         { 
          alert(jsonObj.message); 
         } 
         else 
         { 
          total = jsonObj.price; 

          $("#desc" + numberOfProducts).val(jsonObj.description); 
          $("#prix" + numberOfProducts).val(roundToDecimals(jsonObj.price,2)); 
          $("#qte" + numberOfProducts).val(1); 
          $("#total" + numberOfProducts).val(roundToDecimals(total,2)).change(); 

          newRow = addProductRow(numberOfProducts); 

          $("#prod" + numberOfProducts).after(newRow); 

          numberOfProducts++; 
         } 
        }); 
      }); 

そして、ここでaddProductRow機能だ

function addProductRow(numOfProd) 
{ 
if(numOfProd % 2 == 0) 
{ 
    newRow = "<tr class=\"alternate1\" id=\"prod" + numOfProd + "\">"; 
} 
else 
{ 
    newRow = "<tr class=\"alternate2\">"; 
} 

newRow += "<td><input type=\"text\" class=\"prodNum\" name=\"prodNum[]\" id = \"prodNum" + (numOfProd + 1) + "\" /></td>"; 
newRow += "<td class=\"middle\"><input type=\"text\" class=\"desc\" id=\"desc" + (numOfProd + 1) + "\" /></td>"; 
newRow += "<td class=\"middle\"><input type=\"text\" class=\"price\" id=\"prix" + (numOfProd + 1) + "\" /></td>"; 
newRow += "<td class=\"middle\"><input type=\"text\" class=\"qty\" id=\"qte" + (numOfProd + 1) + "\" /></td>"; 
newRow += "<td class=\"middle\"><input type=\"text\" class=\"total\" name=\"total[]\" id=\"total" + (numOfProd + 1) + "\" /></td></tr>"; 

return newRow; 

}

結果は、新しい行が "を使用することができるということですその「prodNum」入力に「変更」イベントを送信する。そのjQueryの1.7の 注意、 -

PBaller

+0

あなたには、いくつかのサンプルコードを投稿したり、例を設定するhttp://jsfiddle.netを使用することはできますか?新しい行を作成した後は、イベントにバインドしていないようです。 – SoWeLie

+0

jQuery 1.7以降を使用している場合は、 'on'を使用してください。そうでなければ、 'delegate'を使います。これは最後の1時間だけでこれについて尋ねられた3番目(少なくとも)の質問です。 –

+0

SoWeLieこれはまさに何が起こるかです。イベントを作成後に入力にバインドすることはできません。そして、それでもどのように知りません。私は@Ghommeyソリューションを試しましたが、どちらもうまくいきません。いくつかの助けはまだ素晴らしいでしょう。 –

答えて

1

liveの代わりbindを試してみてください、ありがとうございます。 live()メソッドは推奨されていません。 jQuery 1.7以降を使用している場合は、.on()を使用してください。

http://api.jquery.com/live/

// jQuery 1.3+ 
$("a.offsite").live("click", function(){ alert("Goodbye!"); }); 

// jQuery 1.4.3+    
$(document).delegate("a.offsite", "click", function(){ alert("Goodbye!"); }); 

http://api.jquery.com/on/

​​
+0

申し訳ありませんが私は答えが必要でしたが、この解決策は私の問題のために働いていません。私はそれが実際に何かのために働くと確信しています。あなたの助けをありがとう。さらなるヘルプのためのコードスニペットを提供します。 –