Jquery按钮。单击bug?

Jquery按钮。单击bug?,jquery,events,Jquery,Events,我有以下自主开发的jquery插件: (function($) { $.fn.defaultButton = function(button) { var field = $(this); var target = $(button); if (field.attr('type').toLowerCase() != 'text') return; field.keydown(function (e

我有以下自主开发的jquery插件:

(function($) {
    $.fn.defaultButton = function(button) {
        var field = $(this);
        var target = $(button);

        if (field.attr('type').toLowerCase() != 'text')
            return;

        field.keydown(function (e) {
            if ((e.which || e.keyCode) == 13) {
                console.log('enter');
                target.click();
                return false;    
            }
        });    
    }
})(jQuery);
我是这样使用它的:

$('#SignUpForm input').defaultButton('#SignUpButton');

$('#SignUpButton').click(function(e) {
    console.log('click');
    $.ajax({
        type: 'post',
        url: '<%=ResolveUrl("~/WebServices/ForumService.asmx/SignUp")%>',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        data: JSON.stringify({
            email: $('#SignUpEmail').val(),
            password: $('#SignUpPassword').val()
        }),
        success: function(msg) {
            $.modal.close();
        }
    });
});
$('signupforminput').defaultButton('SignUpButton');
$(“#签名按钮”)。单击(函数(e){
console.log('click');
$.ajax({
键入:“post”,
url:“”,
contentType:'application/json;charset=utf-8',
数据类型:“json”,
数据:JSON.stringify({
电子邮件:$(“#注册电子邮件”).val(),
密码:$('#SignUpPassword').val()
}),
成功:功能(msg){
$.modal.close();
}
});
});

第一次,它起作用了。第二次,什么也没发生。我第一次在firebug日志中看到enter并单击,但第二次只看到enter消息。这就好像按钮的点击处理程序不知怎么被注销了。有什么想法吗?

听起来很像ajax
success
处理程序中的某个东西在修改包含
#SignUpButton
的DOM部分,从而杀死与之相关的所有事件处理程序。请尝试以下方法:

$('#SignUpButton').live('click', function(e) {
    ...
});

听起来很像ajax
success
处理程序中的某个东西在修改包含
#SignUpButton
的DOM部分,从而终止与之相关的所有事件处理程序。请尝试以下方法:

$('#SignUpButton').live('click', function(e) {
    ...
});

您可能正在重置包含按钮的HTML,这将从头开始重新创建
元素(没有任何事件处理程序)


要解决此问题,可以使用函数添加事件处理程序,该函数将处理与选择器匹配的所有元素上的事件,无论它们是何时创建的。

您可能正在重置包含按钮的HTML,这将从头开始重新创建
元素(没有任何事件处理程序)


要解决此问题,您可以使用函数添加事件处理程序,该函数将处理与选择器匹配的所有元素上的事件,无论它们是在何时创建的。

没有回答这个问题,但您应该使此可链接,因为它是一个有用的插件:)

另外,请注意,
已经是jQuery对象,无需克隆它。

制作这个wiki,可以随意改进:)

不回答这个问题,但是你应该让它可以链接,因为它是一个有用的插件:)

另外,请注意,
已经是jQuery对象,无需克隆它。

制作这个维基,请随意改进:)

ahhh是的。我正在使用SimpleModel,它克隆元素并中断事件处理程序。你和斯莱克斯都做得很好,但我会给你答案,因为你先发了。啊,是的。我正在使用SimpleModel,它克隆元素并中断事件处理程序。你和斯莱克斯都做得很好,但我会给你答案,因为你先发了。谢谢你。我是jquery插件的新手,只是复制/修改了一个现有的插件。我想我错过了“还这个”的声明。谢谢你。我是jquery插件的新手,只是复制/修改了一个现有的插件。我想我错过了“还这个”的陈述。