0

Я беру атрибут сеанса в своем javascript, а затем использую его в if-else. Сценарий должен запускаться всякий раз, когда пользователь прикрепляет теги привязки к тегу привязки.Почему javascript не работает в Internet Explorer и Mozilla, но отлично работает в Google 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> 

Script отлично работает на хроме, но не по Mozilla и IE. На mozilla я вижу, что теги привязки были связаны с этим javascript, но все же он не запускается.

+2

Вы имеете передать 'event' объект из встроенных обработчиков. Если вы посмотрите на консоль, вы обнаружите ошибку «событие не определено». Похоже, вы используете jQuery, почему бы вам не назначить события jQuery? – Teemu

+0

Спасибо, что поняла ошибка !!! Хотя было бы неплохо, если бы он работал в любом случае, – nikdroid

ответ

1

Передача события, а не идентификатор. Кроме того, вам не нужен 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

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

+0

Якорный тег, имеющий атрибут HREF, имеет значение EventHandling по умолчанию для перехода к указанному HREF. Используя onclick, вы должны переопределить поведение тега привязки по умолчанию. javascript: полностью поддерживается всеми браузерами и существует уже несколько десятилетий. Если вы только хотите использовать onclick, используйте кнопку и создайте ее как ярлык привязки. В этом случае вы выполняете дополнительную работу и без необходимости переопределяете поведение тега привязки по умолчанию. –

+0

Я понимаю, что вам нужно будет предотвратить действие по умолчанию, но это намного лучше, чем использование протокола JavaScript. При всем уважении, дополнительная работа (не большая работа, если честно) намного лучше, чем увековечение плохой модели. – Sampson

Смежные вопросы