Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery deferred.fail()只执行一次_Jquery_Promise_Jquery Deferred - Fatal编程技术网

jQuery deferred.fail()只执行一次

jQuery deferred.fail()只执行一次,jquery,promise,jquery-deferred,Jquery,Promise,Jquery Deferred,下面jQuery的延迟fail()只执行一次,为什么 var dfd = $.Deferred(); $('button').on('click', function(){ if(typeof lorem === 'undefined') { return dfd.reject(); } }); dfd.fail(function(){ alert('Variable lorem is not defined'); }); 预期行为:当您重复单击

下面jQuery的延迟
fail()
只执行一次,为什么

var dfd = $.Deferred();

$('button').on('click', function(){

    if(typeof lorem === 'undefined') {
        return dfd.reject();
    }
});

dfd.fail(function(){
    alert('Variable lorem is not defined');
});


预期行为:当您重复单击按钮时,警报应反复触发。

回答我自己的问题,下面的工作原理:

$('button').on('click', function(){

    var dfd = $.Deferred();

    dfd.fail(function(){
        alert('Error');
    });

    if(typeof lorem === 'undefined') {
        return dfd.reject();
    }
});

所以它确实做了它应该做的事@KevinB我希望它发射多次,所以我想我需要以某种方式重新设定承诺?你需要的不是承诺。不是承诺。比如一个事件。或者只是一个函数。只需在click事件中定义延迟,并将失败处理程序作为全局函数,或者在click中也可以,这取决于您呃,下一票。。。为什么?这正是我的建议--