自我匿名函数在加载时运行绑定事件

时间:2015-11-19 15:08:21

标签: javascript jquery modular-design

我正在尝试遵循模块化的js设计模式(揭示),我有一个问题。当我像这样绑定事件监听器时:

$addClient.submit(ajaxCall);

事件ajaxCall不会在加载时运行。但是,当我添加括号时,如下所示:

$addClient.submit(ajaxCall());

...它在加载时运行,不会绑定到事件。是什么赋予了?我想在ajaxCall()函数中添加一个参数,但我似乎无法让它正常工作。只是你有上下文,这是整个代码:

var Ajax = (function(){
   var $addClient = $('#add_client');

   $addClient.submit(ajaxCall);


   function ajaxCall(clearFields) {
        console.log('function called');
        var data = $(this).serialize();
        var url = this.action;
        $.ajax({
            type: 'POST',
            url: url,
            dataType: 'json',
            data: data,
            success: function(data) {
                if(data.st === 0) {
                    $messageContainer.html('<p class="alert alert-danger">' + data.msg + '</p>');
                    setTimeout(function(){
                        $messageContainer.html('');
                    }, 7000);
                } else {
                    $messageContainer.html('<p class="alert alert-success">' + data.msg + '</p>');
                    if(clearFields === true) {
                        $('input[type="text"]').val('');
                        $('input[type="email"]').val('');
                        $('textarea').val('');
                    }
                    setTimeout(function(){
                        $messageContainer.html('');
                    }, 7000);
                }
            }
        });
        return false;
    }
})();

2 个答案:

答案 0 :(得分:0)

当元素不可用时,你应该绑定到它将解除绑定问题的主体,也可以通过将它包装在匿名函数中来传递你的参数:

$('body').on('submit', '#add_client', function () {
    ajaxCall(yourArguments)
});

答案 1 :(得分:0)

#add_client是表格吗?如果是这样,您需要在提交时将其添加为事件侦听器。即:

$addClient.on('submit', ajaxCall)
// EDIT: If you need arguments, pass ajaxCall.bind(null, arguments)