在jQuery链中调用JavaScript函数

时间:2010-10-11 03:19:23

标签: javascript jquery

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();
             //}
        });
    });
});

6 个答案:

答案 0 :(得分:3)

默认情况下,您无法执行此操作,但您可以轻松地将其添加为插件:

$.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动画是异步的。

答案 1 :(得分:2)

为什么不使用回调函数?几乎所有的jquery函数都有它们。

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

答案 2 :(得分:1)

$("#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();
         }
    });
});

the same problem

答案 3 :(得分:0)

你调用jsFunc()的目的是什么?

如果你想要它作为回调你可以使用给定here的sysntax 例如:

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

但是如果你想让函数jsFunc能够作为插件调用,你需要按照CD Sanchez的建议编写一个插件。

我想再次在您的示例代码中有一个问题,您正在调用函数jsFunc并将jsFunc返回的值作为参数传递给调用函数。如果要将函数jsFunc作为回调函数传递,则需要使用语法

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

答案 4 :(得分:0)

(代表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();
             //}
        });
    });
});

答案 5 :(得分:-1)

$("#content article").each(function(i) {
    $(this).delay(i*250).slideDown();
}).callBack();

在链中进行回调的全部原因是它会在所有动画触发发生后运行。