我有以下javascript代码。我试图在选择表单字段中更改隐藏/显示通用函数。让我们举个例子。假设我有一个select字段,其中值为“none”,“auth”,“other”,如果用户选择“auth”,则显示另一个表单字段。对于不同的选择字段,我可能在形式中有很多地方。因此我在profile_field_toggler
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"});
});
知道如何解决这个问题吗?
答案 0 :(得分:0)
闭包只能访问自己范围内的变量,但绝对不会(也不能)了解最终调用它的函数的范围。
在这个特定的例子中 - 或许" block_code"应该选择作为参数。
答案 1 :(得分:0)
看起来很奇怪,但我找到了解决方案。看来你只能在来自调用者的调用中传递selected
,即使它是在泛型函数中定义的,它也可以工作。看一下这个。我刚刚添加了return
,以便可以评估条件。它起作用了。我测试了所有不同的条件,它正在工作..甜蜜,但很奇怪。
jQuery(document).ready(function() {
profile_field_toggler("base[remove_option]", "general_passwordassword_block", function() {return(selected == "auth")});
});