1

モジュラー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;
    }
})();
4

2 に答える 2

0

要素が利用できない場合のバインドの問題を取り除くために、本文にバインドする必要があります。また、匿名関数でラップして引数を渡します。

$('body').on('submit', '#add_client', function () {
    ajaxCall(yourArguments)
});
于 2015-11-19T15:12:21.763 に答える
0

#add_clientフォームですか?その場合は、送信時にイベント リスナーとして追加する必要があります。すなわち:

$addClient.on('submit', ajaxCall)
// EDIT: If you need arguments, pass ajaxCall.bind(null, arguments) 
于 2015-11-19T15:12:38.563 に答える