【问题标题】:jQuery click event does not trigger after one timejQuery点击事件一次后不触发
【发布时间】:2025-12-17 20:40:01
【问题描述】:

我是这个网站和 jQuery 的新手。我不知道这是否是常识,但我有一个提交按钮的问题,比如这个线程:
jQuery click event just trigger once
但我的代码是这样的:
我的页面上有这样的表格:

<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 中。它运作良好,但我有另一个提交事件来搜索这些歌曲:

$('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 工作并用新结果替换我的表。然后我的表格第二次无法使用。
对不起,很长的帖子,但我不知道要发布什么,不应该发布什么。非常感谢。

【问题讨论】:

  • 使用 .on('click', function(){...}) 代替 .click(function(){ ... })。就像您链接到的问题的公认答案一样。
  • @Matt .click().on('click',function() 最终是同一个东西
  • @wirey No. .on() 等效于 .bind()(已弃用),它将事件处理程序应用于与选择器匹配的所有当前 和未来 元素。 .click 只是将处理程序绑定到当前存在的元素。
  • @Matt 不,只有当你委托.. 意思是$(parent).on('click','element',function().. 而$(element).on('click',function() 相当于 bind().. 和简写 .click()
  • @dystroy 看看他的第一条评论.. 他使用 .on 的方式不是委托.. 相当于 bind().. 和 .click()

标签: php javascript jquery ajax forms


【解决方案1】:

如果您要替换 .submit 元素,则您首先使用 $('.submit').click(function(){ 定义的事件处理程序不会链接到任何现有元素。

为了将事件处理程序链接到任何 '.submit' 元素,包括后期创建的那些(这是您的 search.php),您需要使用 jquery on 函数:

$('document').on('click', '.submit', function(){...})

这将适用于文档的所有“.submit”元素,即使是在调用时不存在的元素。

如果您可以定义一个选择器,您可能拥有比“文档”更精确的选择器。

【讨论】:

  • 是的,我正在替换我的整个表格,其中 .submit 是我的输入按钮类。但是$('document').on('click' , '.submit', function(){ 也不起作用。而且即使是第一次也不行
  • "第一次也不行"?你确定吗 ?没有错字?如果$('.submit').click(function(){ 有效,那么on 就没有理由无效...
  • 这两个函数都没有代码。我只想捕获按钮单击并返回 false,以查看代码是否有效,但只有这个捕获。 $('document').on('click' , '.submit', function(){ 不起作用
  • 可能是因为我的 jquery 版本??我怎样才能加载最新的?我试过但无法完成一个工作。你可以给我写你自己的脚本src标签
【解决方案2】:

结果:

$('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
谢谢大家

【讨论】: