我是这个网站和jQuery的新手。我不知道这是否是常识,但我对提交按钮有问题,如下所示:
jQuery点击事件只触发一次
但我的代码是:
我的页面上有一张这样的表格:
<table border="1">
<tr><th>Song</th><th>Listen</th></tr>
<tr><td>Singer - Song </td>
<td><form class="frm" id="lis_0" name="name">
<input type="hidden" class="url" value="somelink" id="url_0" />
<input class="submit" type="submit" onmouseover="activate(this, 0)" onmouseout="deactivate(this, 0)" value="Listen" />
</form>
</td>
</tr>
<tr><td>Singer - Song </td>
<td><form class="frm" id="lis_1" name="name">
<input type="hidden" class="url" value="somelink" id="url_1" />
<input class="submit" type="submit" onmouseover="activate(this, 1)" onmouseout="deactivate(this, 1)" value="Listen" />
</form>
</td>
</tr>
....
....
</table>
我从这些表中获得信息到player.php
,如下所示:
$('.submit').click(function(){
$.ajax({
type : "GET",
url : "player.php",
data : {"url" : $("#active").val() },
success : function(response){
alert(response);
$("#response div").fadeOut("fast", function(){
$("#response div").remove();
$("#response").append($(response).hide().fadeIn());
});
}
});
return false;
});
这个player.php
返回一个div,类似这样:
'<div class="mp3player">
<p id="audioplayer_1">Alternative content</p>
<script type="text/javascript">
AudioPlayer.embed("audioplayer_1", {
soundFile: "'.$file.'",
titles: "'.$title.'",
artists: "'.$artist.'",
autostart: "yes"
});
</script>
</div>'
在删除之前的响应div之后,我将把它附加到页面上的响应div中。它工作得很好,但我有另一个提交事件来搜索这些歌曲:
$('form[id^="search"]').submit(function(){
$.ajax({
type : "GET",
url : "search.php",
data : {"searchText" : $("#searchText").val() },
success : function(response){
$('div[id="results"]').fadeOut("fast", function(){
$('div[id="results"]').remove();
$("#leftcolumn").append($(response).hide().fadeIn());
});
}
});
return false;
});
当我从以下表单在我的页面上进行搜索时:
<form class="search" id="searchForm" name="name">
<input type="text" value="" id="searchText" name="searchString" />
<input type="submit" value="Search" />
</form>
search.php
起作用,并用新的结果替换了我的表。然后我的表格第二次不起作用了
很抱歉发了这么长的帖子,但我不知道该发什么,不该发什么。非常感谢。
如果要替换.submit
元素,则首先用$('.submit').click(function(){
定义的事件处理程序不会链接到任何现有元素。
为了使事件处理程序链接到任何".submit"元素,包括创建的相关元素(这是您的search.php),您需要使用jquery on函数:
$('document').on('click', '.submit', function(){...})
这将适用于文档中的所有".submit"元素,即使是在调用时不存在的元素。
如果可以定义一个选择器,那么它可能比"document"更精确。
结果:
$('form[id^="lis"]').live('click' , '.submit', function(){
.live()
绑定解决了我的问题。如果您想使用.on()
绑定,那么ajax加载的内容不应该与已经使用该函数绑定的内容相同。至少据我所知
http://jquery-howto.blogspot.com/2008/12/how-to-bind-events-to-ajax-loaded.html
感谢大家