2011-04-13 76 views
0

我一直在試圖找到一種方法來爲多個事件添加相同的動作。jQuery - 爲多個事件添加相同的動作&綁定

我有以下行爲分配給#comid(這是一個選擇菜單)。

$("#comid").change(function() 
{ 
    comid = $("#comid").val(); 
    //alert(comid); 

    $('#com_photo').addClass('loading'); 

    $('#com_photo').load('ajax.php?requestType=ajax&action=get_com_photo&comid=' + comid, function() { 
     $('#com_photo').removeClass('loading'); 
     $('#com_photo img').hide(); 
     $('#com_photo img').fadeIn(1000); 
     alert('Image Loaded.'); 
    }); 
}); 

現在,上面的代碼運行良好。當用戶從選擇菜單中選擇一個項目時,會觸發更改事件併發出ajax請求,並顯示圖像以及一個警告窗口,顯示「已加載圖像」。

但是,如果用戶不使用鼠標,而是使用鍵盤按鍵/按鍵從菜單中進行選擇,則需要觸發相同的操作。它沒有這樣做默認情況下,我希望它做了,但似乎並非如此,所以我想分配相同的動作爲keyup或keydown事件,但我不想寫(或複製/粘貼)相同的代碼再次。

一個,而搜索的我發現了在bind()後,我試圖做這樣的:

$("#comid").bind('keyup',function(event){ 
    $("#comid").trigger('change'); 
} 

它的工作原理,但是當我使用KEYUP,我看到警告窗口兩次說「圖像加載「,所以我覺得這種行爲是不需要的,因爲它好像是在提出兩次請求。

有什麼我做錯了嗎?還是有什麼更好的替代品,我想要完成?

感謝提前:)

+2

使用鍵盤更改時,更改事件仍然會觸發。我認爲的區別在於它在onblur之前不會觸發,或者用戶在使用鍵盤改變它之後在其他地方點擊。 – ChrisThompson 2011-04-13 21:47:48

+0

對,就是這個問題。有沒有解決方法? – Zubair1 2011-04-13 22:08:00

回答

8
$("#comid").bind('change keyup', function(){ 
    ... 
}); 

您可以將功能附加到多個這樣的活動。檢查文檔bind,它非常有用。

你可能也想看到關於live。它幾乎和bind一樣,但是函數也會應用到任何新創建的(匹配)元素。

編輯:對於您的選擇菜單,如果您使用箭頭鍵選擇選項,該功能將激發兩次。在你的情況下,你應該只使用change()。 Keyup()不是必需的。

+0

+1,用於更簡單和更好的語法 - >更簡單的解決方案(取決於情況)。 – Damb 2011-04-13 21:52:42

+0

是的,我已經介紹了綁定alittle。我也嘗試過將這些事件放在一起,但它仍然做同樣的事情。 '$(「身體」)綁定(「改變KEYUP」,函數(){ 警報(「短信」); });' – Zubair1 2011-04-13 22:09:40

+0

在我的上述評論,這只是一個示例代碼顯示的行爲我在說什麼。 – Zubair1 2011-04-13 22:12:58

2

您可以用活()多個事件綁定:

$("#comid").live({ 
    click: function(){/* code */}, 
    change: function(){/* code */} 
}); 

然後,您可以只是包裝你的腳本到一個函數並調用它的所有事件。

更多的信息在jQuery API