2015-06-03 152 views
1

我試圖將jQuery的mouseenter事件連接到容器中的一堆鏈接。我也想取消鏈接的導航,所以我接線點擊事件。突然之間,鼠標中止處理程序只在點擊鏈接後執行。它仍然是鼠標輸入事件,因爲如果我將鼠標懸停在鏈接上,並再次單擊它不會觸發,它只會在每個條目中發生一次。但只有當我點擊。當我將鼠標移到它上面時,沒有任何反應。我創建了一個​​來試圖展示問題,但我無法在那裏重現它。它按預期工作。這裏是我的代碼:jQuery委託的mouseenter事件僅在點擊時觸發

<div> 
    <a name="lnkClassTime" href="#">@classTime.ClassTimeHour</a> 
</div> 

Wireup:

this.attachSchedule = function() { 
    _$classSchedules = $("#classSchedules"); 

    //..wire up other events 

    _$classSchedules.on("mouseenter", "a[name='lnkClassTime']", classTimeMouseEnter); 
    _$classSchedules.on("click", "a[name='lnkClassTime']", classTimeClicked); 
} 

function classTimeClicked() { 
    //Fires when I click the link 
} 

function classTimeMouseEnter() { 
    //Only fires if I click the link 
} 

它必須是一些愚蠢的事。任何人都可以弄清楚發生了什麼?

+0

已解決,請參閱下面的答案。 – xr280xr

+0

我建議給鏈接一個id,以便你可以避免Sizzle選擇器[name ='lnkClassTime'] – frenchie

+0

感謝您的建議。該鏈接是在一個asp.net mvc循環中創建的,所以我最終會得到重複的ID。任何方式在這個? – xr280xr

回答

1

您是否嘗試過將其關閉並重新打開?我現在有。這似乎是Chrome或Chrome開發者工具行爲不當。我已經將瀏覽器窗口和標籤頁打開了很長時間,並在我開發頁面時重新使用它。儘管刷新了頁面,但仍然不能正常工作。我猜想有些事情因爲關閉Chrome並重新打開後出現了問題,因此表現正常。

編輯: 通過在mouseenter處理程序中設置一個斷點,點擊斷點,然後按下F5在執行暫停時刷新頁面,似乎可以重複該操作。

-1

如果我理解正確,它似乎能夠按預期工作。

var clickCount = 0; 
 
var enterCount = 0; 
 

 
var $container = $("#container"); 
 

 
$container.on("mouseenter", "a[name='lnkClassTime']", classTimeMouseEnter); 
 
$container.on("click", "a[name='lnkClassTime']", classTimeClicked); 
 

 
function classTimeClicked(){ 
 
    $("#clicked").text(++clickCount); 
 
} 
 

 
function classTimeMouseEnter(){ 
 
    $("#entered").text(++enterCount); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <div> 
 
     <div><a href="#" name="lnkClassTime">8:00 am</a></div> 
 
    </div> 
 
    <div> 
 
     <div><a href="#" name="lnkClassTime">10:00 am</a></div> 
 
    </div> 
 
</div> 
 

 
<div id="output"> 
 
    <div id="clicked"></div> 
 
    <div id="entered"></div> 
 
</div>

+0

對......我說:「我創建了一個jsdfiddle來試圖展示這個問題,但我無法在那裏重現它,它按預期工作。」但在我的實際頁面上,它按我描述的那樣工作。然後 – xr280xr

+0

需要看到你的實際頁面。 。 。 –

0

嘗試結合在classTimeMouseEnter()功能click事件,應保證事件處理順序。

+0

我試過了,但沒有解決。我認爲訂單不重要,是嗎?我可以完全刪除click事件/處理程序,而且我仍然需要點擊才能運行classTimeMouseEnter。 – xr280xr