在没有事件的情况下调用jQuery效果

时间:2012-09-14 03:14:08

标签: javascript jquery jquery-ui

我有一个函数调用SwapOnscreenPhotos。以下是该功能的来源:

function SwapOnscreenPhotos(currentPhotoSet, arrowClicked)
{
    $("#photo-list img").each(function(index) 
    { 
        $(this).attr("src", photoData[currentPhotoSet][index].url);

        if (photoData[currentPhotoSet][index].liked === true)
        {   
            $(this).addClass("liked");
        }
        else
        {
            $(this).removeClass("liked");
        }
    });

    //Animate the old photos off of the screen
    $("#match").hide("slide", { direction: "left" }, 1000);
}

我做了一些随机的事情,然后在函数的最后,我想无条件地在#match上调用一个效果。没有事件我想要执行此效果(如果重要,事件确定我是否首先调用SwapOnScreenPhotos)。我该如何执行此效果?

修改

对不起,让我澄清一下自己。我得到的印象是每个jQuery表达式都遵循类似的公式。 $('selector').event(function() { //function stuff});

我的代码$("#match").hide("slide", { direction: "left" }, 1000);与此示例有很大差异。我的代码更类似于以下模型:$('selector').function。请注意,没有任何事件指示何时应执行代码以及何时不应执行代码。有没有办法在没有这个事件的情况下调用jQuery函数?当我尝试运行上面的代码时,我收到了这个错误:

  

未捕获TypeError:对象#的属性'#'不是函数jquery.js:8780       Tween.run jquery.js:8780       tick jquery.js:8491       jQuery.fx.timer jquery.js:9032       动画jquery.js:8555       jQuery.fn.extend.animate.doAnimation jquery.js:8871       jQuery.extend.dequeue jquery.js:1894       jQuery.fn.extend.queue jquery.js:1937       jQuery.extend.each jquery.js:611       jQuery.fn.jQuery.each jquery.js:241       jQuery.fn.extend.queue jquery.js:1930       jQuery.fn.extend.animate jquery.js:8881       jQuery.each.jQuery.fn。(匿名函数)jquery.js:8853       AnimateMatch match.js:21       SwapOnscreenPhotos match.js:70       $ .ajax.success match.js:167       jQuery.Callbacks.fire jquery.js:974       jQuery.Callbacks.self.fireWith jquery.js:1082       完成jquery.js:7650       jQuery.ajaxTransport.send.callback

我认为此错误是由于我未能指定事件引起的。这更有意义吗? 谢谢

2 个答案:

答案 0 :(得分:2)

  

我得到的印象是每个jQuery表达式都遵循类似的公式。 $('selector')。event(function(){// function stuff});

不是不是这样。并非一切都是对事件的反应。你可以打电话:

$("#match").hide("slide", { direction: "left" }, 1000);

在DOM准备就绪后,您可以随时执行操作,并对所选元素执行操作。

您可能会遇到错误,因为您在DOM准备好之前尝试使用jQuery元素选择。这就是为什么你通常包装需要在onReady附件中选择元素的任何东西。这样,在解析DOM并且可以使用之前,js不会执行。

$(function(){
   // this will execute as soon as the DOM is ready
   $("#match").hide("slide", { direction: "left" }, 1000);
});

onReady与onLoad类似,但之前发生过因为onLoad等待加载外部资源(如图像),一旦加载DOM就会发生onReady。

答案 1 :(得分:1)

您正在尝试使用JQuery UI hide;如果尚未加载JQuery UI库,那么这是您收到的错误消息,而您正在使用plain JQuery

例如,如果我使用Firebug在此(Stack Overflow)页面上运行您的代码,那么我会收到相同的错误。

$("body").hide("slide", { direction: "left" });
  

TypeError:对象#的属性'#'不是函数


总而言之,您尝试调用该函数的方式并没有错。我认为问题在于你忽略了包含JQuery UI库,或者它没有正确加载。