两个脚本不能同时工作

时间:2013-09-16 23:34:36

标签: javascript jquery html

对此可能有一个非常简单的解释(可能是一个更清洁的方法),但我是新的,无法弄明白。任何帮助都有助于学习过程......

我有一个脚本,根据用户从下拉列表中选择的内容,显示一个或另一个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)而引发错误。该错误导致文档准备好在第二个函数中不起作用。在下面的答案中引用了更详细的解释。

2 个答案:

答案 0 :(得分:0)

可能是$(document).ready()会覆盖初始作业吗?如果你使用不同的函数/变量名也没关系...... $(document).ready是一样的......

答案 1 :(得分:0)

通过@ answer找出@skmasq指出的相关问题的问题。 @JustinWood对我原来的问题发表了评论。事实证明我的脚本抛出了错误("Uncaught ReferenceError: checkValue is not defined"),这不允许文档就绪功能正常工作。

以下是answer

的关键部分
  

重要的是要注意每个jQuery()调用必须实际返回。如果在一个异常中抛出异常,则永远不会执行后续(无关)调用。

     

无论语法如何,这都适用。您可以使用jQuery(),jQuery(function(){}),$(document).ready(),无论您喜欢什么,行为都是一样的。如果早期的一个失败,后续的块将永远不会运行。