2012-02-24 38 views
0

我繼承一段代碼,其具有一系列像以下功能:如何優化我的JavaScript?

$("#data[User][notify_one_day_out]").change(function() { 
    $("#updatenotificationsform").submit(); 
} 

$("#data[User][notify_one_month_out]").change(function() { 
    $("#updatenotificationsform").submit(); 
} 

和此上和去。我如何寫一個函數來做同樣的事情,因爲每個ID都以數據開頭。對不起我是JS新手

感謝

+1

這不就是兩次完全相同的代碼嗎?如果設置了'User'和'notify_one_day_out'屬性,則Als,'#data [User] [notify_one_day_out]'將ID與元素'data'匹配。如果它們是ID的一部分,則必須轉義'[]'。 – 2012-02-24 03:09:14

+0

抱歉更新了代碼 – jini 2012-02-24 03:10:22

回答

4

像這樣的事情可能會爲你工作:

$('[id^="data"]').change(function() { 
$("#updatenotificationsform").submit(); 
} 

,基本上說:抓取所有帶有ID開頭的字符串「數據」的元素,你可以在這裏閱讀更多關於:http://api.jquery.com/attribute-starts-with-selector/

讓我知道這是否有幫助!

編輯

另外,如果你可以修改你的商標,你可以在同一類分配到所有這些因素,然後只需選擇使用類選擇。

+0

如果您對HTML輸出有控制權,您在此提供的替代解決方案絕對是您的選擇。 – maxedison 2012-02-24 03:22:52

0

除了@ Deleteman的中肯的意見,記住,你可以爲$()指定多個選擇,如:

$( "#data[User][notify_one_month_out]", 
    "#data[User][notify_one_day_out]", 
    "#some-other-selector", 
    // ... 
).change(function() { 
    $("#updatenotificationsform").submit(); 
} 
+0

你必須逃避'[]'。 – 2012-02-24 03:26:19

+0

我該怎麼做? – jini 2012-02-24 04:20:42

0

實際上,你可以堆疊起來的jQuery選擇這樣夠的幫助,或者你真的有很多呢?

$("#data[User][notify_one_day_out], #data[User][notify_one_month_out]").change(function()  
{ 
    $("#updatenotificationsform").submit(); 
}