【发布时间】:2023-03-22 05:34:01
【问题描述】:
我有以下 javascript 代码。我正在尝试在选择表单字段中实现隐藏/显示通用功能。让我们举个例子。假设我有一个选择字段,其中值为“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"});
});
知道如何解决这个问题吗?
【问题讨论】:
-
你确定你没有把这件事复杂化一点吗?
-
@adeneo,感谢您的参与。我可能会同意您的看法。但这不是重点。我放在这里的只是一个虚拟代码,而实际实现是基于类似的问题。所以让我们找到问题的解决方案:)
-
把你的 condition 保存为一个字符串然后调用
eval()吗?我假设在调用selected时处于调用函数范围内。
标签: javascript jquery closures