2015-02-05 24 views
0

我在javascript中使用會話屬性,然後在if-else中使用它。 無論何時用戶某些錨點標籤點擊錨點標籤,腳本都會運行。爲什麼下面的javascript在Internet Explorer和Mozilla中無法正常工作,但在Chrome瀏覽器中正常工作?

<a id="someId" href="/someurl" onClick="checkSession(this.id)">Link</a> 

<a id="someOtherId" href="/someurl" onClick="checkSession(this.id)">Link2</a> 

和身體

<script type="text/javascript"> 

    function checkSomething(clickedId){  

     event.preventDefault();  
     var value= <%=(int) session.getAttribute("key")%>; 

     if(value != -1){ 
      window.location = $('#'+clickedId).attr('href'); 
     }else { 
      alert("Please Select a value first then click on the link."); 
      $("#someInput").focus(); 
     } 

    }; 


</script> 

腳本中完美運行在Chrome,但無法在Mozilla和IE瀏覽器。 在mozilla上,我可以看到錨標籤已經綁定了那個javascript,但它卻沒有運行。

+2

您已經從內嵌處理器通過'event'對象。如果你看看控制檯,你會發現「事件未定義」的錯誤。看起來你會使用jQuery,爲什麼不用jQuery分配事件? – Teemu 2015-02-05 18:26:27

+0

謝謝了解錯誤!雖然這將是很好,如果它會高壓工作反正, – nikdroid 2015-02-05 18:52:39

回答

1

傳遞事件而不是ID。此外,你不需要jQuery來獲取元素的href。只需使用香草的JavaScript:

<a id="someId" href="/someurl" onClick="checkSession(event)">Link</a> 
<a id="someOtherId" href="/someurl" onClick="checkSession(event)">Link2</a> 

<script> 
    function checkSession(event) { 
     event.preventDefault(); 
     var clickedId = event.target.id; 
     var href = event.target.href; 

     // etc 
    } 
</script> 
+0

謝謝理解錯誤!雖然這將是很好,如果它會高壓工作反正, – nikdroid 2015-02-05 18:54:12

0

另外,您可以:

<a id="someId" href="javascript:checkSession('/someurl')">Link</a> 
<a id="someOtherId" href="javascript:checkSession('/someOtherurl')">Link2</a> 

<script> 
    function checkSession(url) { 
     var value= <%=(int) session.getAttribute("key")%>; 

     if(value != -1){ 
      window.location = url; 
     } else { 
      alert("Please Select a value first then click on the link."); 
      $("#someInput").focus(); 
     } 

    } 
</script> 
+0

請不要使用'javascript:'協議。而是使用'addEventListener'綁定處理程序或使用像jQuery這樣的工具。 – Sampson 2015-02-05 19:15:20

+0

具有HREF屬性的定位標記具有指定的HREF的默認EventHandling。通過使用onclick,你必須重寫錨標籤的默認行爲。 javascript:是所有瀏覽器的完全支持的功能,已經有幾十年了。如果您只想使用onclick,請使用按鈕並將其設置爲錨點標籤。在這種情況下,您正在做額外的工作,並且不必要地重寫錨標記的默認行爲。 – 2015-02-05 20:11:18

+0

我知道您需要防止默認操作,但這樣做比使用JavaScript協議好得多。在所有應有的尊重下,額外的工作(老實說,沒有太多的工作)遠遠好於延續不良模式。 – Sampson 2015-02-05 20:29:47

相關問題