2012-01-05 98 views
0

我想讓不同的事件調用相同的函數。我從這裏閱讀其他帖子,但我想在一個頁面中使用此功能。調用jQuery函數

情況是這樣的:

我有約。 80列表框(選擇)在表單中,我通過插件jCombo(jQuery & jSON & php)提供它們。首先,我將每個選擇列表框(.change())與隱藏字段相關聯,因爲我想在表上存儲索引(更新方法由php創建)。問題是,當我重新打開修改相同的記錄(同一PHP文件),jCombo改變所有<select lists>並重新初始化爲0。所以,我的我的事件$("select#listbox").change({});變化,很明顯,我的隱藏字段值爲0

有這種情況,我覺得一個簡單的解決方案(我從三天前開始使用jQuery & Ajax)從選擇列表中取消關聯函數,並釋放到$(「#AddButton」)onmouseup({...});. 所以,我寫了80隱藏字段:

if ($("select#listbox_n_").val() != 0) { 
    $("#hidden_n_").val($("select#listbox_n_").attr('value')); 
} 

,其中n = 1 ... 80。

但現在我必須重複這一更新按鈕,以便:

  1. 有其他方法,以解決名稱的功能?
  2. 什麼是「存儲」功能的最佳位置(例如過程或什麼),因爲我想執行它們,只有當它是調用。
+1

請格式化您的問題,以便代碼可讀。看看右邊或這裏的框:http://stackoverflow.com/markdown – 2012-01-05 21:27:34

+5

請寫出你的話,使他們有道理。 – 2012-01-05 21:29:03

+2

很困惑。我並不擔心代碼格式化,而是試圖理解最終目標。對問題的高級概述將極其有用。 – 2012-01-05 21:33:04

回答

0

我猜你想要做的是從多個事件調用一個函數?如果是這樣,所有你需要做的就是寫你的功能,並參考你的事件。至於放置該功能,只需將它放在document.ready($(function() {...});)之外即可。

只是爲了說明,這是我讀到這個問題時碰巧寫的東西。這將檢查textarea字段的長度,並將其返回。這只是簡單而簡單的HTML/jQuery。

HTML:

<label for="message">Message: </label> 
<textarea name="message" id="message" rows="5" cols="70"></textarea> 

的jQuery:

$(function() { 
     $("#message").keyup(checkLength); 
     $("#message").keydown(checkLength); 
     }); 

function checkLength() { 
    var maxlength = 255; 
    var charlength = $(this).val().length; 
    var returnstring = (charlength + " of " + maxlength + " characters used."); 
} 

正如你所看到的,功能checkLength()被調用兩次,在KEYUP從文本區域的keydown事件兩者。請注意,就像我上面所說的那樣,它們放置在document.ready函數的外部。然後它返回一個字符串,該字符串包含添加了多少個字符,與最大數量相比較。最後但並非最不重要的一點是,請注意該函數被稱爲WITHOUT()。這意味着它只是對該函數的引用,只有在該特定事件被觸發時纔會被調用。

我希望這有助於!

+0

謝謝!還有一個問題。 '$(函數(){ $( 「#消息」)KEYUP(checkLength); $( 「#消息」)的keydown(checkLength); });' 應從的document.ready被調用,沒有? 所以問題是爲什麼我應該通過'$(function(){...})調用;'方法直接調用'$(「#message」)。keyup(checkLength);' – 2012-01-13 04:29:25

+0

@drLeo document.ready僅僅是指出,當一個字符被放入'#消息'時,該函數將被執行。加載頁面時,它實際上不會調用該函數。這是因爲我引用了函數,注意我說'.keyup(checkLength)',而不是'.keyup(checkLength())'。 – 2012-01-16 10:44:07

+0

;-)謝謝! – 2012-01-17 15:38:03