0
 $(function(){

$(".mailbutton").click(function() {
  var email = $(".mailingfield").val();
  $.post("/PHP_scripts/mailinglist.php", { email: email }, function(data) {
        var content = $(data).find("#mailinglistform");
        $("#box").empty().append(content);
  });
 });
});

我正在使用它来处理电子邮件地址。如果它在 PHP 脚本中失败,则表单将在“.mailinglistform”中发送回,并带有新的表单和一些解释错误的文本。我遇到的问题是,即使按钮在回调表单中有“.mailbutton”类,按钮在点击时也不会做任何事情。

这是因为 jQuery 只在第一次识别它?如果是这样,有没有办法在回调时“重新加载”'mailbutton'.click 函数?

谢谢!

4

3 回答 3

2

你是对的,因为你只是重新渲染页面的一部分,你之前写的 jQuery 没有注册到你重新渲染的“新”邮件按钮类。为了解决这个问题,您应该使用.on(),例如:

$(".wrapper").on('click', '.mailbutton', function() {
  var email = $(".mailingfield").val();
  $.post("/PHP_scripts/mailinglist.php", { email: email }, function(data) {
        var content = $(data).find("#mailinglistform");
        $("#box").empty().append(content);
  });
 });

在这种情况下,包装器需要是页面的重新渲染部分(例如“内容”类,可能是表单周围的类等)之外的类元素,并且是不断存在的(即不重新-在 ajax 调用中渲染)。这会将 onclick 处理程序附加到作为包装器类的子级的任何 .mailbutton 类,无论它们是在呈现页面时存在,还是稍后添加到 DOM 中。

于 2012-07-20T15:54:48.230 回答
1

使用on绑定点击事件。当控件在回调函数中再次呈现时,其事件被删除。使用 on 而不是 click 可以自动重新绑定事件。

 $(function(){

    $(".mailbutton").on("click", function() {
    var email = $(".mailingfield").val();
    $.post("/PHP_scripts/mailinglist.php", { email: email }, function(data) {
        var content = $(data).find("#mailinglistform");
        $("#box").empty().append(content);         
    });
    });
});
于 2012-07-20T15:53:31.220 回答
0

为此,您可以将 AJAX 与 JQuery 一起使用。或者您可以使用用户load()

$(".mailbutton").click(function() {
        $.ajax({                                      
              url: 'api.php', // Put your calling page path here
              data: "",
              dataType: 'json',
              success: function(data)
              {
                //do whatever you want to do on success
              } 
        });
    });
于 2012-07-20T15:53:10.117 回答