代码之家  ›  专栏  ›  技术社区  ›  fmsf

Javascript未在IE上运行

  •  0
  • fmsf  · 技术社区  · 17 年前

    我有一个JavaScript代码段,它在Firefox和Safari上运行得很好,但拒绝在IE上运行:

    var drop= function(id)
    {
       if(document.getElementById("select1").value == "Ficha de pediatria"){
        top.location.href = "print.jsp?id="+id+"&type=2";
       }
       else if(document.getElementById("select1").value == "Ficha normal"){
            top.location.href = "print.jsp?id="+id+"&type=1";
       }
    }
    
    <select id="select1" name="select1" onChange="drop(id);return false;">
    <option>Imprimir:</option>
    <option>Ficha de pediatria</option>
    <option>Ficha normal</option>
    </select>
    

    由于它有更多的JSP代码,我将其分为三部分,但它“保持不变”。有人知道为什么它不能在IE上运行吗?

    4 回复  |  直到 7 年前
        1
  •  5
  •   tvanfosson    17 年前

    [编辑]抱歉。我在第一篇帖子中引入了一个错误,即没有仔细查看你是如何构建你的网址的。我不该把 id 参数。我已经更新了代码,现在应该可以工作了。

    请尝试以下操作:

    function drop(ctl,id)
    {
       var value = ctl.options[ctl.selectedIndex].value;
    
       if(value == "Ficha de pediatria"){
           window.top.location.href = "print.jsp?id="+id+"&type=2";
       }
       else if (value == "Ficha normal"){
           window.top.location.href = "print.jsp?id="+id+"&type=1";
       }
    }
    
    <select id="select1" name="select1" onChange="drop(this,id);return false;">
    <option>Imprimir:</option>
    <option>Ficha de pediatria</option>
    <option>Ficha normal</option>
    </select>
    

    [编辑]稍作解释。..

    我认为问题在于它如何访问DOM。我不认为IE在select上有value属性。我认为你必须通过所选的选项来解决这个问题。此外,我不确定全局命名空间中是否有top属性,但您应该能够通过 window.top 设置位置。最后,我通过指定 this 作为参数,您可以跳过元素查找,直接从作为参数传递的控件中引用它。

        2
  •  3
  •   Alana Storm    17 年前

    IE不喜欢你获取选择值的方式

    document.getElementById("select1").value
    

    这是说“给我id为select元素中选定选项的value属性中的文本 选择1 。你的选项没有任何价值。当Firefox和Safari遇到这种歧义时,它们会返回所选选项的文本。当Internet Explorer遇到这种歧义时,它会返回一个空字符串

    <select id="select1" name="select1" onChange="drop(this,id);return false;">
        <option value="Imprimir:">Imprimir:</option>
        <option value="Ficha de pediatria">Ficha de pediatria</option>
        <option value="Ficha normal">Ficha normal</option>
    </select>
    

    如果这不可能,你会想抓住 文本 选择的选项。

    var theSelect = document.getElementById("select1");
    var theValue  = theSelect.options[theSelect.selectedIndex].text
    

    最后,虽然不是你的直接问题,但硬编码 选择1 不是进入选择名单的最佳方式。考虑使用此关键字

    function foo(theSelect){
        alert(theSelect.options);
    }
    

    ...

    <select id="whatever" onchange="foo(this);">
    ...
    </select>
    

    这有点通用,您可以在具有任何ID的select上使用您的函数。

        3
  •  1
  •   kamens    17 年前

    这并不是说IE“没有.value”的<选择>元素,是你 尚未为<指定任何值;选项>要素 Firefox、Safari和其他浏览器可能会保护您免受此错误的影响。然而,您的元素应该构造为:

    <select ...>
    <option value="Imprimir">Imprimir:</option>
    <option value="Ficha de pediatria">Ficha de pediatria</option>
    <option value="Ficha normal">Ficha normal</option>
    </select>
    

    …您将看到更多标准的x浏览器行为<选择>的.value属性。

        4
  •  -4
  •   mbillard    17 年前

    我看到两个可能的原因。

    1. -函数的声明方式。我从来没有见过这样的,虽然我想它奏效了。

    也许可以尝试以下操作,看看它是否仍然不起作用:

    function drop(id)
    {
        // same code
    }
    

    2. -IE中的return false并不总是正常运行(相信我,这取决于计算机)。因此,与其返回false,不如尝试:

    onChange="drop(id);event.returnValue=false;return false;"
    

    如果可能的话,创建一个这样的方法:

    function CrossBrowserFalse()
    {
         if(IE) // use whatever you want to detect IE
         {
             event.returnValue = false;
         }
    
         return false;
    }
    

    然后在你的方法中,你可以使用:

    onChange="drop(id);return CrossBrowserFalse();"
    

    …是的,IE有时(经常)很奇怪


    如果这两个失败,至少要确保通过在其中放置一些警报或断点来调用drop函数(如果IDE支持javascript)。