0

我有在点击事件时打开窗口弹出的功能。这些功能在外部 js 文件上。

$(document).ready(function() {
    $('a.cart-window').click(open);

    function open (){
        // function perform
        var loginBox = $(this).attr('href');
        return false;
    }   
});

一切正常。但是当我重新启动这个函数( $('a.cart-window').click(open); )以响应 ajax 成功调用以在新生成的 html 上实现这个函数时,它不会工作。firebug 显示错误( NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Illegal operation on WrappedNative 原型对象)。

我只是想做的是,我有很多冗长的 JS 函数,并给它们一个名字,就像我在上面的代码中显示的那样,并从任何地方调用它,所以我不需要在 ajax 成功响应中编写完整的代码。重要说明我在我的函数中使用 $(this) 并且还想将事件传递给函数。

ajax代码

函数调用Ajax() {

$.ajax({
    url: ,
    type: "POST",
    data: 
}).done(function (msg) {

$('a.cart-window').click(open);

});

}

4

2 回答 2

0

尝试这个,

(document).ready(function() {
    $('a.cart-window').on('click',function(e){open(e)});
    function open (e){
        e.preventDefault();
        // function perform
        var loginBox = $(e.currentTarget).attr('href');// you can use e.currentTarget here
        return false;
    }   
});
于 2013-07-03T08:27:36.937 回答
0

如果您正在处理动态元素,请使用.on() 使用事件委托(使用事件传播)

$(document).ready(function() {
    $(document).on('click', 'a.cart-window', open);

    function open (){
        // function perform
        var loginBox = $(this).attr('href');
        return false;
    }   
});

在这种情况下,不需要为新更新的 dom 重新启动事件处理程序。

于 2013-07-03T08:27:44.650 回答