2012-02-22 12 views
0

jQueryを使用してHTML入力要素の値にアクセスするのに問題があります。この入力要素は、以前の関数では.html()関数を使用して最初に書き込まれました。.html()jQuery関数で作成されたHTML入力ボックスの値にアクセスできません。

<script type="text/javascript"> 
      $(document).ready(function() { 
      $("#model").change(function() 
       {         
       $.post("../includes/_ajaxSpecs.php",{ model:$(this).val() } ,function(data) 
       { 
       var string = data; 
       var partsArray = string.split(','); 
        $("#comp_specs").fadeTo(200,0.1,function() //start fading the messagebox 
        { 
        //add message and change the class of the box and start fading 
        $(this).html(partsArray[0]+"<input style='width:12em;margin-left:5px;border:1px solid #CCC;' name='input1' id='input1' /><br />"+partsArray[1]+"<input style='width:12em;margin-left:5px;border:1px solid #CCC;' name='input2' id='input2' /><br />").addClass('jText').fadeTo(900,1); 
        }); 
        }); 
       }); 
       }); 
</script> 

は、今私は(#new_input)#1 INPUT1の値を取得し、別の入力ボックスを設定したいこれでNO問題 -

THIS

は、INPUT要素を作成MY CODE IS

<script type="text/javascript"> 
$(document).ready(function() { 
$("#input1").change(function() 
     { 
    var text = $("#input1").val(); 
    $("#new_input").val(text);  
     }); 
}); 

:このコードを使用して、その値に

最後のPOSTで正常に表示されても、#input1と#input2でこれらの値にアクセスできない理由はわかりませんか? .html()関数によって書かれたフォーム要素にアクセスするJQueryに問題はありますか?私は2番目の関数を使用していますが、これは標準的なフォーム要素で動作することを知っています...

更新:あなたの提案には更新されたコードがありますが、それでもグラブすることはできません。

<script type="text/javascript"> 
$('#div1').on('change', '#input1', function() { 
    $("#input1").change(function() { 

    var text = $("#input1").val(); 
    $("#new_input").val(text);  
     }); 
}); 
</script> 

UPDATE:解決しよう、おかげ@Dragon

+0

入力を作成する前後に.changeイベントをバインドしていますか? –

+0

要素を作成する初期関数の後にchangeイベントが発生しています – xXPhenom22Xx

+0

どのようなエラーが発生していますか? –

答えて

1

他にも指摘されているように、イベントハンドラは作成前に '#input1'要素にバインドされています。作成後にバインドするか、「#input1」をコンテキストとしてバインドしてドキュメントにバインドします。別の方法として、ハンドラをバインドして呼び出す完全なサイクルを確認できる長さの親要素にバインドすることもできます。

$(document).ready(function() { 
$(document).on('change', "#input1", function() 
     { 
    var text = $("#input1").val(); 
    $("#new_input").val(text);  
     }); 
}); 

それだけです。詳細については、http://api.jquery.com/on/

3

あなたは$(ドキュメント).readyしかしhasn $( "#1 INPUT1")に$( "#のINPUT1")に変更を呼んでいますまだ作成されていません。変更イベントをバインドするには、jQuery's on() functionを使用してください。

$(document).on("change", "#input1", function(event){ 
    var text = $("#input1").val(); 
    $("#new_input").val(text); 
}); 
+0

同じ問題に直面するので、これはうまくいかないと思います。 '#input1'は存在しないので、' .on() 'を呼び出すと何もしません。 '.live()'はこの場合にはうまくいきましたが、 '.on()'の方が非難されました。 – dragon

+0

@dragon - ちょうどあなた自身の質問に答えました。 .live()はjQuery 1.7以降の.on()の方が非難されました。私の例で示したように、DOMが準備されてバインドされた後にinput1を作成できます。 – j08691

+0

@ j086901私は理解していますが、 '.on()'の使い方は、元の質問で使われた '.click()'とどう違うのですか?要素を作成した後にハンドラがアタッチされていれば、どちらも同じことになりますが、ここではそうではないと思います。 – dragon

2

いいえ、ページの読み込み時にjQueryコードが実行されています。その時点で、#input1と#new_inputは存在しません。

あなたが他の

$('#containingDiv').on('change', '#input1') function() 
{ 
} 

など何かが多分$(「#のINPUT1」)を登録するフィールドが書かれた後の変化() - 。多分あなたの$の最後にコールバックとしての( '#モデル ')変更?

+0

あなたの機能に小さなタイプが、まだ助けてくれてありがとう! – xXPhenom22Xx

関連する問題