Подтвердить что ты не робот

Jquery unbind click

Я собираюсь отключиться, просто пытаясь отвязать обработчик onclick из события в jQuery, чтобы впоследствии связать его с другой функцией.

Я изолировал код на тестовой странице, поэтому ничего, кроме мяса, просто кнопка, вызывающая функцию, и script, что пытается отменить его:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript">
    </script>

    <script src="../../Scripts/jquery-1.3.2.js" type="text/javascript">
    </script>

    <script type="text/javascript" language="javascript">
        $(document).ready(function() { $("#btnNext").unbind('click'); });
        function hi() {window.alert("hi");}
    </script>
</head>

<body>

    <input id="btnNext" type="button" value="Next" onclick="hi();" />
</body>
</html>

Кто-нибудь знает, почему событие click продолжает вызывать функцию hi() независимо от того, что я сказал в документе. Уже?

Спасибо

4b9b3361

Ответ 1

Поскольку вы помещаете его в атрибут html, он остается там. Он не был связан с jQuery, поэтому jQuery не отслеживает его использование.

$("a").bind('click',hi);
$("a").unbind('click',hi);

http://docs.jquery.com/Events/bind

Ответ 2

Только для записи вы можете использовать функцию removeAttr jQuery для удаления изначально указанного атрибута onclick.

$('#btnNext').removeAttr("onclick");

Кроме того, в ответ на Чад я согласен с тем, что, как правило, лучше выполнять всю вашу привязку с jQuery, но я в ситуации (используя ASP.NET MVC), которая требует, чтобы отдельные ссылки имели некоторые параметры модели в их щелкните обработчики событий. Было бы более запутанным IMO попытаться подключить эти обработчики событий через jQuery.

Ответ 3

Я не мог заставить removeAttr работать, но это делает:

$("#btnNext").click(function(){ return false; });

Мне нужно было удалить поставляемые ASP.NET onclicks (только для SelectedNodeChanged) в моем TreeView, чтобы я мог обработать событие на клиенте. Конечно, моя функция щелчка включала больше, чем "return false".

Ответ 4

Скажем, у вас есть

$(elem).on("click", function() { ... }); 

вам даже не нужно связывать его, если вы хотите отвязать его позже. Сделать это можно просто:

$(elem).unbind();

и это приведет к удалению обработчиков независимо от типа. Если вы хотите быть более конкретным, вы всегда можете передать тип события, например "click".