我有以下JavaScript代碼。我試圖在選擇表單域中實現隱藏/顯示通用功能。讓我們舉個例子。假設我有一個select域,其值爲「none」,「auth」,「other」,如果用戶選擇「auth」,則顯示另一個表單域。對於不同的選擇領域,我可能會在很多地方出現這種情況。因此,我寫了下面profile_field_toggler
在JavaScript中傳遞代碼作爲函數參數,並且該代碼使用函數中定義的變量
function escapeJquerySelectorStr(str) {
if (str) {
return str.replace(/([ #;?&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1');
}
return str;
}
function profile_field_toggler (cotroller_id, reciever_id, block_code) {
parsed_controller_id = "#"+escapeJquerySelectorStr(cotroller_id);
parsed_reciever_id = "#"+escapeJquerySelectorStr(reciever_id);
selected = jQuery(parsed_controller_id + " option:selected").val();
if(block_code()) {
jQuery(parsed_reciever_id).removeClass("hide");
} else {
jQuery(parsed_reciever_id).addClass("hide");
}
}
這個功能在這裏,我撥打電話到即profile_field_toggler
通用功能。泛型函數的最後一個參數接受條件代碼,所以我將它傳遞給selected == "auth"
以下的調用。但selected
沒有在這個調用範圍,因此它不會工作(因爲我想引用泛型函數中選定的變量)。那我該如何解決這個問題呢?請注意,我必須僅在呼叫方中保留諸如selected == "auth"
或selected != "xyz"
或selected == "undefined"
的條件,因爲它們可能會有所不同。
jQuery(document).ready(function() {
profile_field_toggler("base[remove_option]", "general_passwordassword_block", function() {selected == "auth"});
});
任何想法如何解決這個問題?
你確定你不會讓這個有點太複雜嗎? – adeneo 2015-02-23 17:44:44
@adeneo,感謝您的支持。我可能會同意你的意見。但這不是重點。我在這裏只是一個虛擬代碼,而實際的實現是基於類似的問題。因此,讓我們找到問題的解決方案:) – JVK 2015-02-23 17:49:34
將*條件*保留爲字符串,然後調用'eval()'?我假設在調用'selected'時處於調用函數範圍。 – 2015-02-23 17:52:09