我有以下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