javascript – 点击事件的JQuery .done

前端之家收集整理的这篇文章主要介绍了javascript – 点击事件的JQuery .done前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不是一个 javascript开发人员,所以请耐心等待…

我需要在jQuery点击事件完成后执行重定向.这就是我所拥有的,但我无法将.done应用于.click.在$.when中包装整个东西不起作用以太…

$("#printpng").click(function(){
            $('#tool_docprops').click();
            $('#tool_docprops_save').click();
            $('#tool_export').click()
        }).done(function(){
                window.location.href = "<?PHP echo $base_url ?>/sign/print"
        });

有没有人有更好的解决方案?

谢谢

解决方法

假设每次单击都触发了一个Ajax调用(你为什么会遇到这个问题),你可以简单地等待任何/所有Ajax请求完成:
$(document).ajaxStop(function () {
     window.location.href = "<?PHP echo $base_url ?>/sign/print"
  });

如果需要,您还可以在更改URL之前添加超时,以防在Ajax加载后进行其他处理.
如果它不是Ajax问题请澄清,我将调整(或删除)这个答案.

完整版(Ajax等待后额外延迟1秒)可能看起来像:

$("#printpng").click(function(){
    $('#tool_docprops').click();
    $('#tool_docprops_save').click();
    $('#tool_export').click();
    $(document).ajaxStop(function () {
        setTimeout(function(){
             window.location.href = "<?PHP echo $base_url ?>/sign/print"
        },1000);
    });
});

正如所承诺的[sic]使用promises更好的解决方

由于从未提供完整的代码,假设有多个ajax调用,解决方案就是猜测.

一般的解决方案是不触发点击事件,而是以承诺友好的方式简单地为每次点击调用相关代码.

假设每个单击处理程序都有一个专用函数,只需让每个函数返回一个promise:

例如

function loadPropsViaAjax(){
     // simply return the ajax call as $.ajax returns a promise
     return $.ajax({parameters here});
 }

 function saveDocPropsViaAjax(){
     // simply return the ajax call as $.ajax returns a promise
     return $.ajax({parameters here});
 }

 function waitForImageToload(){
     // create a deferred object
     var def = $.Deferred();

     // When the image eventually loads,resolve the promise
     $('#someimageselector').on('load',function(){
        def.resolve();
     });

     // Return the promise immediately
     return def.promise();
 }

然后在你的例子中使用它(使用.then()顺序运行):

// On click button event...
 $("#printpng").click(function(){
    // Run operations sequentially
    loadPropsViaAjax().then(saveDocPropsViaAjax).then(waitForImageToload)
        .done(function(){
            window.location.href = "<?PHP echo $base_url ?>/sign/print"
     });
 });

或者,如果它们可以并行运行,请使用$.when:

// On click button event...
 $("#printpng").click(function(){
    // Run operations in parallel
    $.when(loadPropsViaAjax,saveDocPropsViaAjax,waitForImageToload)
        .done(function(){
            window.location.href = "<?PHP echo $base_url ?>/sign/print"
     });
 });
原文链接:https://www.f2er.com/jquery/159589.html

猜你在找的jQuery相关文章