簡體   English   中英

在jQuery鏈中調用JavaScript函數

[英]Call JavaScript function in a jQuery chain

function jsFunc() {
  alert('i am js!');
}

$('#node').slideDown().call(jsFunc());

當然,該功能不稱為“調用”。

**編輯**

(代表OP添加了解決方案)

http://jsfiddle.net/gx2mJ/1/

要么

HTML:

<div id="content">
    <p class="article">
        this is an article
    </p>
</div>

JavaScript的:

function callBack() {
    $("#content .article").html("the callback has been called");
}

$(document).ready(function() {
    $("#content .article").slideUp(0);

    $("#content .article").each(function(i) {
        $(this).delay(i*250).slideDown(function(){
             //if ($("#content .article:animated").length < 1) {
                  callBack();
             //}
        });
    });
});

默認情況下,您無法執行此操作,但可以輕松將其添加為插件:

$.fn.call = function (fn, args, thisp) {
    fn.apply(thisp || this, args);
    return this; // if you want to maintain chainability -- other wise, you can move the return up one line..
}

盡管我不確定您為什么要這么做。 如果您認為它要等到slide完成后才能運行,否則您會錯的,因為jQuery動畫是異步的。

為什么不只使用回調函數? 幾乎所有的jQuery函數都有它們。

$('#node').slidedown('normal', function(){jsFunc()})
$("#content article").each(function(i) {
    $(this).delay(i*250).slideDown();
}).callBack();

在鏈中擁有回調的全部原因是這樣,它將在所有動畫發生后運行。

試試這個,

$("#content .article").each(function(i) {
    $(this).delay(i*250).slideDown(function(){
         if ($("#content .article:animated").length < 1) {
              callBack();
         }
    });
});

同樣的問題

調用jsFunc()的目的是什么?

如果你想把它當作一個回調,您可以使用給出的sysntax 這里例如:

$('#node').slidedown('normal', function(){jsFunc()}).

但是,如果希望函數jsFunc能夠作為插件調用,則需要按照CD Sanchez的建議編寫一個插件。

我再次認為示例代碼中存在一個問題,您正在調用jsFunc函數,並將jsFunc返回的值作為參數傳遞給call函數。 如果要傳遞函數jsFunc作為回調函數,則需要使用語法

$('#node').slideDown().call(jsFunc);

(代表OP添加了解決方案)

http://jsfiddle.net/gx2mJ/1/

要么

HTML:

<div id="content">
    <p class="article">
        this is an article
    </p>
</div>

JavaScript的:

function callBack() {
    $("#content .article").html("the callback has been called");
}

$(document).ready(function() {
    $("#content .article").slideUp(0);

    $("#content .article").each(function(i) {
        $(this).delay(i*250).slideDown(function(){
             //if ($("#content .article:animated").length < 1) {
                  callBack();
             //}
        });
    });
});
$("#content article").each(function(i) {
    $(this).delay(i*250).slideDown();
}).callBack();

在鏈中擁有回調的全部原因是這樣,它將在所有動畫觸發器都發生之后運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM