2013-11-04 75 views
1

我有這個問題只發生在IE8中。它可以在所有最新的瀏覽器IE10,Chrome的30精,火狐24jQuery觸發IE8中錯誤元素的點擊事件

這裏的問題是: 我在選擇建立一個click事件,但它發射的其他元素,也

這是腳本:

$('#side-nav .nav-node-branch > a').click(function (eevent) { 
    var el = $(eevent.target); 
     if (el.is('#side-nav .nav-node-branch > a')) 
     // all is well 
     else 
     // sometimes arrives here, HOW??? 
    } 

這裏是簡化的HTML結構:

<html><body> 
    <nav id="side-nav"> 
    // 
    <ul> 
     <li class="nav-node-branch"><a href="http://google.com">link</a></li> 
    </ul> 
    </nav> 
    <div class="content-area"> 
    <form data-bind="submit: submitSearch" class="indented" novalidate="novalidate"> 
    <fieldset> 
     <legend>Bestellung für</legend> 
     <ul> 
      <li> 
       <span> 
        <input checked="checked" data-bind="checked: IsEmployeeSelf" data-val="true" data-val-required="The IsEmployeeSelf field is required." id="IsEmployeeSelfYes" name="IsEmployeeSelf" type="radio" value="true"> 
        <label for="IsEmployeeSelfYes">Eigene Person</label> 

        <input data-bind="checked: IsEmployeeSelf" id="IsEmployeeSelfNo" name="IsEmployeeSelf" type="radio" value="false"> 
        <label for="IsEmployeeSelfNo">Andere Person</label> 
       </span> 
      </li> 
     </ul> 
    </fieldset> 
    </form> 
    </div> 
</body></html> 

處理機點擊FO內部的任何以上時被觸發R M。即使是傳說或只是形式背景。 儘管它只應觸發NAV中的元素。導航不重疊或任何東西。

順便說一句:我打電話給document.createElement('nav');更早

關閉淘汰賽似乎解決了這個問題.... 但整個事情是建立在淘汰賽周圍。所以這不是一個真正的選擇。 並根據http://knockoutjs.com/documentation/browser-support.html它應該被支持。 (淘汰賽3具有相同的問題)

這裏是庫的列表,我使用:

  • ES5-墊片
  • 全球化
  • jQuery的1.10.2
  • jquery- UI-1.10.3
  • jquery.json最新解析器
  • jQuery.mCustomScrollbar
  • jQuery.mous ewheel
  • jquery.unobtrusive-AJAX
  • jquery.validate.hook
  • jquery.validate
  • jquery.validate.unobtrusive
  • 敲除2.3.0
  • Modernizr的-2.6.2
  • mvcfoolproof.unobtrusive
  • 要求
  • ss(scriptsharp)
+0

導航標記可能無法通過IE8正確處理,您可以嘗試替換它,例如由div – paulitto

+0

難以重現錯誤,因爲jsFiddle不喜歡IE8。 – melancia

+0

我試圖重現它在這裏:http://jsbin.com/oboVATu/1,但它工作正常。這隻包括es5-shim,jquery,jquery-ui和淘汰賽。所以可能它是Knockout和另一個庫之間的一些交互。 –

回答

0

我想我找到了問題。 一切使用RequireJS庫中移動這個這個腳本後解決:

$('input').keypress(function (e) { 
    // If the key pressed was enter 
    if (e.which == '13') { 
     $(this).closest('form').submit(); 
    } 
}); 

我不認爲這有什麼wron這個腳本。我的理論如下:

我使用requireJS來加載我的所有庫。但是,上面的這個小腳本沒有RequireJS加載。我的猜測是,我正在使用兩個不同的jQuery實例。但每個訪問相同的jQuery緩存,這反過來引發了一些元素上看似隨機的處理程序。

我現在已經確保所有的jQuery訪問都是通過RequireJS來完成的,這似乎是爲我解決了這個問題。