2008-11-02 84 views
0

運行我明白了運行良好的Firefox和Safari瀏覽器的JavaScript,但拒絕在IE的Javascript不是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> 

我trimed這個,因爲它有更多的JSP代碼,但它仍然是一樣的。任何人都知道爲什麼它不在IE上運行?

回答

4

[編輯]對不起。我在第一篇文章中介紹了一個錯誤,不仔細看看你是如何構建你的url。我不應該刪除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上有一個值屬性。我認爲你必須通過選擇的選項來解決它。此外,我不確定全局名稱空間中是否有頂級屬性,但您應該可以通過window.top來設置該位置。最後,我通過指定this作爲參數進行了一些改進,您可以跳過元素查找並直接從作爲參數傳遞的控件中引用它。

+0

仍然不起作用:( – fmsf 2008-11-02 19:36:28

-4

我看到兩個可能的原因。

- 函數聲明的方式。我從來沒有見過這樣的,但我猜想它的工作原理。

也許嘗試以下,看看它是否仍然不能正常工作:

function drop(id) 
{ 
    // same code 
} 

- 在IE中返回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是怪異,有時(經常)


如果這兩個失敗,至少確保你的通過在那裏放置一些警報或斷點(如果您的IDE支持javascript)來調用drop函數。

1

這並不是說IE瀏覽器「沒有。價值」的<選擇>元素,那就是你沒有指定任何值,請<選項>元素。 Firefox,Safari和co。可能會保護你免受這個錯誤。然而,你的元素應該被解釋爲:

<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的財產。

3

IE不喜歡你抓住的選擇

document.getElementById("select1").value 

的價值的方式這是說:「給我這是在所選選項的值屬性中選擇元素與文本id select1。您的選項沒有任何值當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); 
} 

...

​​

這是比較通用的一點,你就可以在選擇使用功能與任何ID。