2010-07-30 64 views
3
路過時ARGS

哎,我試着撥打電話一個jQuery函數,並傳遞一些ARGS與它的調用jQuery函數

$('#button').mouseenter(exampleFunction(arg1,arg2)); 

function exampleFunction(arg1,arg2) 

形式的功能工作正常,沒有這樣寫的ARGS。

$('#button').mouseenter(exampleFunction); 

function exampleFunction; 

但只要我添加()將args放在函數中停止工作。

這樣的:

$('#button').mouseenter(exampleFunction()); 

看起來這是某種形式的jQuery語法錯誤對我而言

這裏的實際代碼

<script type="text/javascript"> 

$(document).ready(function() { 
$('.section').mouseover(function(){ 
    $('#nav2').fadeOut(0).animate({"height":"30px"}, 250); 

     }); 


$('#section1').hover(navSelect); 

function navSelect(){ 
    if ($('.interior').is(':hidden')){ 
    $('.subSection').fadeOut(250); 
    $('.interior').delay(250).fadeIn(250); 
    $('#selector').animate({"left":"0px"},250); 
    }} 


$('#section2').mouseenter(function(){ 
    if ($('.exterior').is(':hidden')){ 

    $('.subSection').fadeOut(250); 
    $('.exterior').delay(250).fadeIn(250); 
    $('#selector').animate({"left":"100px"},250); 
    } 
}); 
$('#section3').mouseenter(function(){ 
    if ($('.view').is(':hidden')){ 

    $('.subSection').fadeOut(250); 
    $('.view').delay(250).fadeIn(250); 
    $('#selector').animate({"left":"200px"},250); 
    } 
}); 


     }); 
</script> 
+0

一個類似的問題:http:// stackoverflow。com/questions/939032/jquery-pass-more-parameters-into-callback – 2010-07-30 22:41:50

回答

0

您在jQuery中綁定到的事件的函數通過jQuery調用方法傳遞'event'對象。

jQuery("#button").mouseenter(function(evt){[ do something ]});

,如果你想以模板化要已綁定到事件的功能,像做

$('#button').mouseenter(exampleFunction(arg1,arg2));

,你可以構造一個功能,像這樣:

function exampleFunction(arg1, arg2){
        return function(evt){
            jQuery(this).animate({width: arg1, height: arg2},250)
        };
}};

讓它返回函數th在結合(並因此,通過了事件對象), ,然後將其結合到元件等

jQuery("#button").mouseenter(exampleFunction("50%","50%"))
        .mouseleave(exampleFunction("100%","100%");

+0

謝謝!那完美的作品,我真的不明白它爲什麼會起作用,但確實如此,有人會關心解釋嗎? – 2010-07-31 02:37:53

1

的Funktion和的Funktion之間的差值( )是一個指向函數的指針,另一個是函數執行的結果。

嘗試

mouseenter(function(a,b){....}) 

有您所定義的功能,通過它,定義的函數需要2個ARGS,a和b。

+0

我試圖做的是做一個jquery函數,根據傳遞給它的參數做不同的動畫。基本上,參數會告訴動畫哪些元素會淡入或淡出,或者元素的位置。所以基本上我希望做一個全局函數,它可以根據它給出的參數做很多事情。 – 2010-07-30 23:23:23

+0

@詹姆斯,你不想要一個主控功能。爲什麼不只是有一堆功能,並在適當的時間打電話給每個? – hvgotcodes 2010-07-31 00:23:56

+0

我正在考慮將此插件添加到我的頁面中,並且我注意到他觸發動畫的方式,並認爲我可以通過添加參數並將其設置爲主函數來擴展該插件。我接受你的建議並堅持單獨的功能,但可以用主功能來完成嗎? http://cherne.net/brian/resources/jquery.hoverIntent.html – 2010-07-31 00:36:24

5

JavaScript中的函數是第一類對象。你可以把它們放在變量中,從其他函數中返回等。當你寫$('#button').mouseenter(exampleFunction(arg1,arg2));時,你會說「用這些參數運行exampleFunction,並用它的返回值作爲回調函數」。

爲了讓jQuery來以後調用這些參數的功能,你可以使用匿名內聯函數:

$('#button').mouseenter(function() { 
    exampleFunction(arg1,arg2) 
}); 

你不帶參數的函數被調用,並傳遞正確的參數傳遞給函數,你實際上想打電話。這是一個窮人的closure

+0

我只是想了一分鐘的時間,它只是吹了我的腦海,很酷 – 2010-07-31 04:50:55