代码之家  ›  专栏  ›  技术社区  ›  Canavar

为什么这个解绑不起作用?

  •  8
  • Canavar  · 技术社区  · 15 年前

    我试着回答 this question 几分钟前,我为自己准备了这个例子:

    <script>
      function trialMethod()
      {
        alert('On Submit Run!'); return true;
      }
      function trialMethod2()
      {
        alert('On Submit Run trialMethod2!'); return true;
      }
    </script>
    
    <form id="aspnetForm" onsubmit="trialMethod();">
        <input type="submit">
    </form>
    

    为什么第一个解除绑定不起作用:

    <input type="button" id="btnTrial1" value="UNBIND 1" 
       onclick="$('#aspnetForm').unbind('submit', trialMethod);">
    

    但这一方法适用于试验方法2:

    <input type="button" id="btnTrial2" value="UNBIND 2" 
       onclick="$('#aspnetForm').bind('submit', trialMethod2).unbind('submit', trialMethod2);">
    
    5 回复  |  直到 13 年前
        1
  •  11
  •   Rafael    15 年前

    由于jquery的事件模型,第一个解除绑定场景不起作用。jquery将每个事件处理程序函数存储在一个数组中,您可以通过$(“foo”).data(“events”)访问该数组。unbind函数只在这个数组中查找给定的函数。因此,只能取消绑定()使用bind()添加的事件处理程序

        2
  •  5
  •   KyleFarris    15 年前

    如果使用jquery,就不应该将标记与交互代码混合在一起。

    向页面添加一些javascript,如下所示:

    $(function() {
        $('#aspnetForm').bind('submit',function() {
            trialMethod();
        });
        $('#btnTrial2').bind('click',function() {
            $('#aspnetForm').unbind('submit');
        });
        $('#btnTrial2').bind('click',function() {
            $('#aspnetForm').bind('submit', trialMethod2).unbind('submit');
        });
    });
    

    现在,既然这样……现在一切都可以工作了(即使你现在要把 #aspnetForm 在按下第二个按钮时将其完全解开之前)。问题是,表单从未真正“绑定”到开头。可以解除绑定 onsubmit 标记中的参数。

        3
  •  3
  •   Yuki SHIDA    13 年前

    您可以按以下方式解除绑定:p

    $('aspnetform').removeattr('onsubmit');

        4
  •  1
  •   Emon    15 年前

    我以前也遇到过类似的问题。我得出的结论是,只能解除绑定已绑定的方法。由于trialmethod()没有通过jquery绑定,因此对该方法调用unbind将不起作用。

    如果您有任何可能,请告诉我们。

    谢谢。

        5
  •  1
  •   Martin Buberl    13 年前

    存在绑定、解除绑定和表单提交操作的错误:

    如果您绑定然后解除绑定,并且要提交表单,则不能使用 $(form).submit() 但是 $(form INPUT[type=submit]).click() !