2011-11-21 48 views
0

我想使用一個變量來存儲我要綁定的事件。jQuery綁定到可變事件

喜歡的東西:

var the_event = 'mouseover'; 
$().bind(the_event, function(){ 
    console.log('hi there!'); 
}); 

我能做到同樣的事情if S,但我寧願用一種更好的方式,一個可能存在的!

我想做的事,與if叫什麼:

var the_event = 'mouseover'; 

var the_function = function(){ 
    console.log('hi there!'); 
} 

if(the_event == 'mouseover'){ 
    $().bind('mouseover', the_function); 
} else if(the_event == 'click'){ 
    $().bind('click', the_function); 
} 

謝謝!

編輯:

什麼,我其實特林做的是:

var events = { 
    one: 'mouseover', 
    two: 'mouseout' 
}; 

$().bind({ 
    events.one: function(){ 
     console.log('1'); 
    }, 
    events.two: function(){ 
     console.log('2'); 
    }, 
); 
+4

你試過你的第一個例子嗎? –

+0

你是第一個例子是完全正確的。你已經回答你是自己的問題。我強烈建議實際上將選擇器放入jQuery的$()調用中。 – DefyGravity

+0

當你說「我可以做到同樣的事情」時,你在說什麼?跟什麼一樣?你的第一個例子應該工作得很好。 – rossipedia

回答

3

你的第一個例子就是工作,如果有開頭東西在$()bind接受一個字符串,它並不關心字符串是來自文字還是變量。

此:

$("some_selector").bind("click", function(event) { 
    // ... 
}); 

是完全一樣的:

var event_name = "click"; 
$("some_selector").bind(event_name, function(event) { 
    // ... 
}); 

...比存在當然event_name變量,其他。 Gratuitous live example


如果你想要做的多個事件,你也可以這樣做,但你必須創建要傳遞給bind提前對象:

var events = {}; 
var eventName1 = "click"; 
var eventName2 = "dblclick"; 
events[eventName1] = function(event) { /* ... */ }; 
events[eventName2] = function(event) { /* ... */ }; 
$("some_selector").bind(events); 

Live example

你不能直接在文字上做,因爲:在對象文字必須左側的東西是一個文字或文字字符串,它不能是re表達式的SULT(因此不能是一個變量引用),例如,這將工作:

var eventName1 = "click"; 
var eventName2 = "dblclick"; 
$("some_selector").bind({ 
    eventName1: function() { /* ... */ }, // <== Wrong, doesn't use variable, uses "eventName1" 
    eventName2: function() { /* ... */ } // <== Wrong (same reason) 
}); 

所以將其應用於剛剛添加到問題的代碼示例,你會得到:

var events = { 
    one: 'mouseover', 
    two: 'mouseout' 
}; 

var bindEvents = {}; 
bindEvents[events.one] = function(){ 
    console.log('1'); 
}; 
bindEvents[events.two] = function(){ 
    console.log('2'); 
}; 
$(/* You need something here */).bind(bindEvents); 
+0

對於這個誤導性的例子,我很抱歉,我剛剛編輯了這個問題 – Pioul

+0

好吧,這看起來很棒,也很合理:)讓我抽出時間來測試這個,我會回到你身邊! – Pioul

+0

它的工作真棒,我只是缺乏openmind建立對象使用'.bind()',雖然我知道爲什麼它不能工作,我試圖:)謝謝! – Pioul

0

bind()發生事件的名字作爲一個字符串作爲第一個參數,所以:

$("#elem").bind(the_event, function(){ 
    console.log('hi there!'); 
}); 

會工作。請看這裏: http://api.jquery.com/bind/

+0

對於誤導性的例子,我很抱歉,我只是編輯了問題 – Pioul

0

因爲bind方法的第一個參數是一個字符串事件名稱,所以你可以隨時這樣做。或者,您也可以使用和json映射在bind方法中傳遞多個事件處理程序。看看這裏bind

$('#foo').bind({ 
    click: function() { 
    // do something on click 
    }, 
    mouseenter: function() { 
    // do something on mouseenter 
    } 
}); 
+0

對於誤導性的例子,我很抱歉,我只是編輯了問題 – Pioul

+0

即使您編輯的問題應該可以正常工作。 – ShankarSangoli