javascript - jQuery 表单处理,如何在回调上重新分配函数?

标签 javascript jquery forms

 $(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 函数?

谢谢!

最佳答案

你是对的,因为你只重新渲染页面的一部分,所以你之前编写的 jQuery 不会注册到你重新渲染的"new"mailbutton 类中。要解决这个问题,您应该使用 .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 中的。

关于javascript - jQuery 表单处理,如何在回调上重新分配函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11582774/

相关文章:

javascript - AngularJS 作用域变量 Unwatch

Javascript setInterval 没有使它成为函数

css - Bootstrap 3.3.6 小屏幕上的响应式表单

forms - 复制表单字段值并将其粘贴到另一个表单/选项卡中?

javascript - Quasar + Vue + SSR - 如何隐藏敏感数据,例如 API key

javascript - RxJS 函数从一个 observable 发出最后一个值,然后另一个发出 true

javascript - 等待异步任务完成

javascript - 限制在 jQuery Photowall 中显示的照片数量

javascript - Jquery 获取 A 标签的closest() Iframe 返回未定义

jquery - MVC 部分 View 中 ajax 表单提交后 Tinymce 消失