2009-03-09 3 views
0

Ich habe einige Eingabe-Checkboxen, die dynamisch in einer $.post Callback-Funktion generiert werden. Dann habe ich einen $().change() Aufruf, der Dinge tut, wenn der Wert geändert wird (warnt einige Informationen). Für die dynamisch generierten Eingaben funktioniert .change() jedoch nicht. Es gibt andere Eingaben, die funktionieren, die in den HTML-Code, der funktioniert, fest codiert sind, aber die anderen nicht.

Hier ist der Code.

<html> 
<head> 
    <script type="text/javascript" src="js/jquery.js"></script> 
    <script> 
    $(document).ready(function(){ 
     $("#hideme").hide(); 
     $.post("php/test.php",{},function(data){ 
      writeMe = "<input type='checkbox' name='foo' value='" + data + "'>" + data; 
      $("#insert").html(writeMe); 
     }, "json"); 
     $("input[name=foo]").change(function(){ 
      alert($(this).attr("value")); 
     }) 
    }); 
    </script> 

</head> 
<body> 
    <div id="insert"></div> 
    <input type="checkbox" name='foo' value='world'>world 
</body> 
</html> 

php/test.php ist einfach:

echo json_encode("hello"); 

Antwort

2

Das Problem ist, dass Ihre Aussage:

$("input[name=foo]").change(function(){ 
     alert($(this).attr("value")); 
}) 

keine Auswirkungen haben, weil zum Zeitpunkt der Ausführung, es gibt keine Elemente, die $ ("input [name = foo]" entsprechen) weil der $ .post() Callback noch nicht stattgefunden hat.

1

unmittelbar nach dieser Frage veröffentlichen, habe ich versucht, die .change setzen() in dem Rückruf und alles funktionierte gut aus.

$.post("php/test.php",{},function(data){ 
    writeMe = "<input type='checkbox' name='foo' value='" + data + "'>" + data; 
    $("#insert").html(writeMe); 

    $("input[name=foo]").change(function(){ 
     alert($(this).attr("value")); 
    }); 
}, "json"); 
+0

Yup. Grundsätzlich erstellt die Funktion .post (...) einen asynchronen Aufruf von "php/test.php". Die Callback-Funktion wird erst ausgeführt, wenn die Daten zurückkommen. Zu diesem Zeitpunkt wurde Ihr Änderungsereignis bereits an die vorhandenen Eingaben gebunden. – Joel

2

Wenn Sie die Hooks vor dem $ .post definieren müssen, sehen Sie sich LiveQuery an, da Sie nach neuen Elementen Ausschau halten können, die zu Ihrem Selektor passen und diese auch binden.

+0

genial, das ist definitiv eine andere Option – helloandre

+0

Darüber hinaus .Live() ist in jQuery 1.3.x, die für diese genaue Situation bietet verfügbar. – Julian

Verwandte Themen