【问题标题】:Click Handler doesn't work After Jquery POST单击处理程序在 Jquery POST 后不起作用
【发布时间】:2019-10-26 16:02:40
【问题描述】:

我有一个带有 Select 选项和 FORM 的网页,当用户更改选择时, 我的 jquery 脚本函数将动态执行 ajax POST 以用不同的表单(新表单元素)替换原始表单。

但我注意到 Click 处理程序($(button).click() 事件)不适用于新生成的表单。 请在这方面提供帮助。

这是 Jquery 中的一个已知问题吗??

<select id=choice><option>....</select>
<div class=mytable>
<form id='dataform-10'>
.....
<button id="edit-10"></button>
</form>
<div>
<script>
  $(function(){
  $("#choice").change(function(){
    $.get('/portal/go?id='+this.value, function(data, status){ 
            //$(".mytable").hide();
            $(".mytable").html(data);
            $(".mytable").show();
          });
  });
});
</script>
<script>
$('[id^=edit]').on("click",function(e) {
    e.preventDefault();
   var num = this.id.slice(5);   
   var fdata = $('#dataform-'+num).serialize();
   $.post('/portal/update', fdata, function(data, status){ 
            alert(data);
          });
});
</script>

【问题讨论】:

标签: javascript jquery


【解决方案1】:

正如@sh977218 所指出的,click 事件不起作用的原因是在事件处理程序的初始标记之后在 DOM 中添加了新元素。试试这样的:

<script>
function clickEventHandler(event) {
  // code for click event 
   event.preventDefault();
   var num = event.target.id.slice(5);   
   var fdata = $('#dataform-'+num).serialize();
   $.post('/portal/update', fdata, function(data, status){ 
        alert(data);
      });
}
$('[id^=edit]').on("click", function(e){clickEventHandler(e);});
$("#choice").change(function(){
  $.get('/portal/go?id='+this.value, function(data, status){ 
        //$(".mytable").hide();
        $(".mytable").html(data);
        $(".mytable").show();
        $('[id^=edit]').on("click", function(e){clickEventHandler(e);});
      });
});
</script>

【讨论】:

  • 不工作。我的JSfiddle在这里jsfiddle.net/tLerb2n6,请尝试点击第二个按钮。
  • 你还没有使用命名函数试试这个jsfiddle.net/4eq5c81s
  • 我现在要赶上这个事件,但不幸的是这条线 var num = this.id.slice(5);不管用。错误是无法读取未定义的属性“切片”
  • 尝试改用 event.target.id
【解决方案2】:

当你添加一些新的 DOM 时,你需要再次钩住它的事件。

【讨论】:

    【解决方案3】:

    ...$('[id^=edit]').on("click",function(e) {...

    应该是

    ...$(".mytable").on("click", "[id^=edit]", function(e) {...

    你试过这样吗?

    【讨论】:

    • 试过了,没有运气,不是捕捉点击事件,而是表单重定向我
    • 你确定你在处理函数中有e参数,然后是e.preventDefault();
    • 是的,我有 ,function(e) { e.preventDefault();
    • 嗯.. 如果没有游乐场的例子,真的帮不上忙。您可以创建一个fiddle 来说明问题吗?
    • 这不起作用,因为.mytable 不是[id^=edit]。也许交换它们? (或只使用$(document).on("click", "[id^=edit]", function...
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多