对此可能有一个非常简单的解释(可能是一个更清洁的方法),但我是新的,无法弄明白。任何帮助都有助于学习过程......
我有一个脚本,根据用户从下拉列表中选择的内容,显示一个或另一个div(show
而不是hide
)。像这样:
var PickDiv = (function(){
var _obj = {};
var hideShow = function(elem){
if($(elem).val() === '1'){
$("#slider_action").show();
$("#slider_dollar").hide();
}else if($(elem).val() === '2'){
$("#slider_dollar").show();
$("#slider_action").hide();
}else{
$("#slider_dollar, #slider_action").hide();
}
};
_obj.checkValue = function(){
hideShow($('#build_opt'))
};
var events = function(){
$('#build_opt').change(function(){
hideShow(this);
});
};
$(document).ready(function(){
events ();
checkValue ();
});
return _obj;
}());
这很有效,并根据从下拉列表中选择的内容显示正确的div。我想我以后可以在我的代码中重用同样的想法来产生同样的效果。一旦显示div(在做出与上面脚本相关的选择之后),我需要提供另一个带有其他选项的下拉列表。用户将选择其中一个然后显示div。所以,我想,我可以使用这样的东西:
var RunRate = (function(){
var _obj2 = {};
var hideShow_2 = function(elem_2){
if($(elem_2).val() === '6'){
$("#db_sign").show();
$("#app_down", "#in_redem", "#site_vis", "#cont_ent" ).hide();
}else if($(elem_2).val() === '7'){
$("#app_down").show();
else{
$("#app_down", "#in_redem", "#site_vis", "#db_sign", "#cont_ent" ).hide();
}
};
_obj2.checkValue_2 = function(){
hideShow_2($('#action_type_2'))
};
var events_2 = function(){
$('#action_type_2').change(function(){
hideShow_2(this);
});
};
$(document).ready(function(){
events_2 ();
checkValue_2 ();
});
return _obj2;
}());
当然,这不起作用。我尝试了许多不同的东西而没有运气。请注意,如果我从我的代码中排除第一个脚本,第二个脚本工作正常,所以我知道它的工作原理。我猜它与共享变量的两个脚本或者我明显缺少的jquery有关。
任何帮助将不胜感激。总的来说,希望能够在不相互干扰的情况下进行多种类型的依赖性下拉。
感谢您的帮助!
更新
请注意,如果在第二个脚本中,我将替换:
$(document).ready(function(){
带
$( window ).load(function() {
然后问题就解决了。所以,显然问题与文件有关。已经相互干扰,但我不知道如何在没有上述“黑客”的情况下解决这个问题,特别是如果我想使用更多这些依赖的下拉菜单。有没有办法传递一个不同的变量并调用它而不是document
?
更新2
找出问题...我的原始代码由于未定义的引用(checkValue
)而引发错误。该错误导致文档准备好在第二个函数中不起作用。在下面的答案中引用了更详细的解释。
答案 0 :(得分:0)
可能是$(document).ready()会覆盖初始作业吗?如果你使用不同的函数/变量名也没关系...... $(document).ready是一样的......
答案 1 :(得分:0)
通过@ answer找出@skmasq指出的相关问题的问题。 @JustinWood对我原来的问题发表了评论。事实证明我的脚本抛出了错误("Uncaught ReferenceError: checkValue is not defined"
),这不允许文档就绪功能正常工作。
以下是answer:
的关键部分重要的是要注意每个jQuery()调用必须实际返回。如果在一个异常中抛出异常,则永远不会执行后续(无关)调用。
无论语法如何,这都适用。您可以使用jQuery(),jQuery(function(){}),$(document).ready(),无论您喜欢什么,行为都是一样的。如果早期的一个失败,后续的块将永远不会运行。