【问题标题】:JQuery link button does not work returned from PHP, but does work if not从 PHP 返回的 JQuery 链接按钮不起作用,但如果没有则起作用
【发布时间】:2023-03-18 10:47:01
【问题描述】:

我有一个在 jquery 中不起作用的按钮。使用 json 对象将一个按钮从 php 传递到 Jquery。我已经删除了所有其他代码,只是测试按钮以尝试解决这个问题。 我创建了相同的链接并将其放在我的 php.ini 页面上。当点击链接时,会出现一个警报并且有效。

在同一页面上,我有一个附加按钮,它是同一个按钮,但是这个按钮已经从 PHP 通过 json 返回到 Jquery 和 附加到 div。此链接/按钮不起作用?为什么是这样?两者看起来一样!

希望有人可以就这里发生的事情提出建议

谢谢

从 PHP 返回的按钮

   //Jquery basic test button for functionality (works if link button is already on HTML page)
    $("[href='#test']").click(function() {      
    alert("has been clicked");
    });

//JQuery extract of my code 

var content;
$.each(data, function(i, item) {
content += item;

});
$(content).appendTo('#theframe');
},'json');  

也试过

$.each(data, function(i, item) {
content += item;

});
$('#theframe').html(content);
},'json');




//php returned
$json[] = '<a href="#test">View Post</a>';
echo json_encode($json);

//php button on page
<a href="#test">View Post</a>

谢谢

在所有帖子的帮助下解决了,谢谢! @Anthony 的示例添加了框架 $('#theframe').on('click', '[href="#test"]', function(e) { alert('已被点击'); });

【问题讨论】:

  • 感谢发布回复的人,感谢您的解释,我学到了很多;)谢谢。 @Anthony 我用你的例子效果很好,谢谢

标签: php json jquery


【解决方案1】:

您将需要使用 jQuery on() 或 delegate() 函数将点击事件添加到动态添加的新页面元素(在页面加载后)。

如果您使用的是 jQuery 1.7 及更高版本,则应使用 on():http://api.jquery.com/on/

如果您使用的是旧版本的 jQuery,请使用委托:http://api.jquery.com/delegate/

【讨论】:

    【解决方案2】:

    .click() 函数仅将事件处理程序添加到代码运行时存在的元素,因此不会影响以后动态添加的任何元素。解决这个问题的最简单的解决方案是设置事件委托,使用.on()(jQuery 1.7+)或.delegate()(1.7 之前)函数。 .on() 示例如下所示:

    $('body').on('click', '[href="#test"]', function(e) {
        alert('has been clicked');
    }); 
    

    【讨论】:

    • 感谢所有发布回复的人,感谢您的解释,我学到了很多;)谢谢。 @Anthony 我用你的例子效果很好,谢谢
    【解决方案3】:

    它不起作用的原因是您的文档就绪功能只触发一次。这意味着在您的第二个按钮通过 ajax 加载后,没有附加事件处理程序。

    尝试使用“on”或“live”:

    $("body").on("click", a[href="#target"], function(event){
    alert("has been clicked");
    });
    

    http://api.jquery.com/on/

    http://api.jquery.com/

    希望这会有所帮助!

    【讨论】:

    • 那个.on() 语法等同于他们已经拥有的——他们需要使用事件委托语法。此外,.live() 已被弃用 - 没有理由使用它,除非您使用的 jQuery 版本太旧以至于没有.delegate()
    • @AnthonyGrist 感谢您指出这一点!现在已经编辑了:)
    • 感谢 Andbdrew 的帮助
    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2019-04-23
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多