【问题标题】:How to pass object from jquery to javascript如何将对象从 jquery 传递到 javascript
【发布时间】:2012-10-23 23:28:28
【问题描述】:

我想使用选择器将一个对象从 jquery 传递给一个 javascript 函数,如下所示。

flash($("#something span"), "#fff", 250);

但它似乎不起作用。

我不确定要在 javascript 函数中添加什么。 我现在做的是:

function flash(obj,color1,color2,duration) {
    obj.animate({backgroundColor:color1},duration);
    setTimeout(function(){this.animate({backgroundColor:color2},duration);},duration);
}

或者还有其他方法可以代替传递对象吗?例如,在 jquery 中: $("this").flash("#f79999", "#eee", 250);

那么如何定义javascript函数呢?

【问题讨论】:

  • jQuery 是 JavaScript

标签: javascript jquery function parameter-passing


【解决方案1】:

你有一个简单的语法错误。

ojb.animate({backgroundColor:color},duration);

应该是

obj.animate({backgroundColor:color},duration);

【讨论】:

  • 另外,注意JQuery是javascript的框架,所以是javascript。
  • 如果这是解决您问题的答案,我强烈推荐Accepting an answer
【解决方案2】:

您必须包含jQuery.Color 插件才能为background-color 等属性设置动画。

来自“Animation Properties and Values:”

所有动画属性都应该被动画化为一个单个数值,除非下面提到;大多数非数字属性无法使用基本 jQuery 功能进行动画处理(例如,width、height 或 left 可以进行动画处理但 background-color 不能,除非 jQuery.Color()使用插件)。 [...]


除了传递对象之外,还有其他方法吗?例如,在 jquery 中: $("this").flash("#fff",250);

jQuery 的Plugins/Authoring 应该对此有所帮助。但是,您可以将其定义为:

jQuery.fn.flash = function (color, duration) {
    return this.animate({ backgroundColor: color }, duration);
};

$('#something span').flash('#fff', 250);

【讨论】:

  • 是的,但我不知道如何在 javascript 中定义函数。
  • @KyleXie 您问题中的定义应该可以在包含 jQuery.Color 的情况下正常工作。对于 $(this).flash(...) 变体,请参阅我的编辑。
  • 谢谢,它有效。但是还有另一个问题。函数“setTimeout()”在 flash() 中不起作用。我的flash方法是让背景变成一种颜色,比如说红色,然后变回原来的颜色。 flash() { this.animate({backgroundColor:to},duration); setTimeout(function(){this.animate({backgroundColor:from},250);},250); } 但现在只有第一行运行,而第二行没有。
  • @KyleXie 在setTimeout 函数中继续使用obj 而不是this。您也可以使用.delay() 链接动画:jsfiddle.net/UaY4j
  • @KyleXie 这是一个上下文问题。每个函数都有自己的this 值,并且您有两个函数——flash 本身和传递给setTimeout 的匿名函数。要为匿名函数指定this的值,可以使用bind或$.proxy。
【解决方案3】:

在页面中安装了jQuery.Color 插件(确认。@Jonathan Lonowski)...

您可以通过使用 javascript 的 .call() 或 .apply() 来避免传递对象。

这是一个例子:

$(function() {
    function flash(color, duration) {
        this.animate({backgroundColor:color}, duration);
    }
    $("#something span").on('click', function() {
        flash.call($(this), "#fff", 250);
    });
    $("#something_else span").on('click', function() {
        flash.apply($(this), ["#fff", 250]);
    });
});

.call() 和 .apply() 在这里并不是必需的;常规函数调用就足够了。

.call() 和.apply() 通常用于需要调用一个对象的方法但为其提供另一个对象的上下文的情况。通过这样做,该方法可以在不同的this 上运行。

【讨论】:

  • 谢谢你们。但是 setTimeout() 方法在 flash 方法中不起作用,你知道吗?
  • 没有setTimeout,你已经编辑进去了!最简单的解决方案是不使用 setTimeout,而是使用 jQuery 的.delay(),这是一种可链接的方法,可以插入到动画序列中,obj.animate(...).delay(...).animate(...);。
猜你喜欢
  • 2021-01-14
  • 2014-09-01
  • 2012-03-29
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
相关资源
最近更新 更多