jQuery-Ereignis nicht auslösen.
Habe ich 3 Dateien:
- js_json.js -> für meine json-code
- javascript.js -> für meine javascript
Funktion - index.php
Hier der code für js_json.js
:
$(function(){
$('#postTitle').change(function(){
var title_id = $("#postTitle").val();
$.ajax({
type:"post",
url:"proses.php",
data:"title_id=" + title_id,
dataType:"json",
success:function(data){
body="";
//$.each(data, function(i,n){
//body = n['body'];
//});
body += "<a href=\"javascript:void(0);\" id=\"pesan\" name="pesan" onClick=\"\">Hola Test</a>";
$(".postBody").empty();
$(".postBody").append(body);
},
error:function(data){
$(".postBody").empty();
$(".postBody").append("NO Post Selected.");
}
});
return false;
});
});
und hier meine javascript.js
code:
$(function (){
$("a[name=pesan]").click(function (){
alert("holalalalalal.....!");
});
});
und hier die index.php
code:
//some code
<body>
<a href="javascript:void(0);" id="pesan" name="pesan">Hola Test 1</a>
Posts : <br />
<select name="title" id="postTitle">
<option value="">Select Post...</option>
<?php
$sql = "SELECT id, title FROM posts ORDER BY title";
$query = mysql_query($sql) or die(mysql_error());
while($rows = mysql_fetch_array($query)){
print('<option value="' . $rows['id'] . '">' . $rows['title'] . '</option>');
}
?>
</select>
<br />
Body : <br />
<div class="postBody">
Will show the body of post.
</div>
</body>
</html>
und meine Frage ist:
Wenn ich auf den link "Hola" Test 1", es funktioniert und die Meldung erscheint. Das problem ist, nachdem ich klicken Sie auf die option wählen und den link "Hallo Test" angezeigt, und ich klicke dann, dass ("Hallo Test") - Verbindung, die Nachricht wird nicht angezeigt, und es sind keine Fehler im firebug...
Kann jemand mir erklären, warum...? Danke...
- Verwenden
.live()
als @Matt geantwortet, aber im Hinterkopf behalten, dass es ungültig ist, verwenden die gleiche id auf einer Seite mehr als einmal (ids eindeutig sind), und mehr als wahrscheinlich andere Probleme verursachen in der Zukunft.. - vielen Dank für die Beratung...
Du musst angemeldet sein, um einen Kommentar abzugeben.
click()
nur binden Sie das Ereignis für die Elemente, die vorhanden sein auf der Seite an der Zeitclick
genannt wird (das gleiche gilt füron()
ohne ein Selektorbind()
, und alle anderen Methoden in der Verknüpfung-Gruppe zu binden;keydown()
,change()
etc. ).Da Ihr anderes element wird Hinzugefügt bekommen über AJAX einige Zeit später, der handler ist nicht verpflichtet für Sie.
Verwenden
.auf()
mit einem Selektor statt, die binden, die Veranstaltung für alle aktuellen und zukünftigen Elemente abgestimmt, die durch den Selektor.Seit
on()
wurde in jQuery 1.7, wenn Sie mit früheren Versionen von jQuery (wie jene, die existierte, als diese Frage gestellt wurde), können Sielive()
oderdelegieren()
statt;Erwähnen möchte ich (da fand ich keine Erwähnung der es in jeder " - Ereignis nicht auslösen." Fällen, die ich durchforstete das Internet nach), dass es eine Möglichkeit gibt, das könnte dich beißen.
Wenn Sie geschehen, zu verwenden .entfernen() zu extrahieren etwas, das vorübergehend aus dem DOM und dann legen Sie Sie wieder ein, dann verlieren Sie Ihre Veranstaltungen. Was Sie brauchen, um zu verwenden, stattdessen ist .detach(), um die Erhaltung der Daten und Ereignisse nach wiedersetzen. Dies kann schwer zu Debuggen, da alles normal Aussehen, und die event-debugging-Werkzeuge sind lückenhaft am besten.
(Persönlich würde ich Ihnen etwas mehr wie .detachAndScrubDataAndEvents() und .detach(), wie ich bin ein fan von aussagekräftigen Namen speichern Stunden der Fehlersuche. Für diejenigen, die finden .remove() und .detach() werden semantisch und sinnvoll definierten Namen... Friede sei mit Euch... ABER Sie sind flat-out falsch.)