2012-12-15 64 views
0

如果用戶鼠標移過表格單元格,則下拉框會用通過post調用加載的數據替換html。如果用戶鼠標移動不太快,這可以正常工作,但如果速度太快,則html不會更新,因此當用戶將鼠標移回html時不正確。jQuery快速鼠標移動之前事件完成前的mouseleave事件觸發器

$(".edit_dropdown").bind('mouseenter', function() { 
$(this).unbind('mouseenter'); 
var a = $.trim($(this).html()); 
var id = $(this).attr('id'); 

$(this).html("<span id='s-" + id + "'></span>"); 
$.post('save/dropdown.php', { 
    id: id, 
    a: a 
}, function (data) { 
    $("#s-" + id).html(data); 

    $(".edit_dropdown").bind('mouseleave', function() { 
     var id = $(this).attr('id'); 
     var a = $("#e-" + id).val(); 
     var dir = $(this).attr('class'); 
     $(this).html(a); 
     $(this).bind('mouseenter', function() { 
      $(this).unbind('mouseenter'); 
      var a = $.trim($(this).html()); 
      var id = $(this).attr('id'); 
      $(this).html("<span id='s-" + id + "'></span>"); 
      $.post('save/dropdown.php', { 
       id: id, 
       a: a 
      }, function (data) { 
       $("#s-" + id).html(data); 
      }); 
     }); 

    }); 
}); 
}); 

HTML

<tr> 
<td>customer county</td> 
<td class="edit_dropdown" id="customer-cust_s_county"><?php echo $row['cust_s_county']; ?></td> 
</tr> 

的$。員額文件返回英國縣名單,如果縣名的HTML那麼縣城返回所選擇的選項匹配。

+0

您可以創建一個小提琴,以便我們測試問題嗎? –

回答

0

發生此問題的原因是,mouseleave處理程序僅響應於對mouseenter處理程序的異步響應而置於適當位置。

您應該尋找一個更簡單的整體代碼結構,不涉及分離和重新附加處理程序。

它應該能夠編寫保持永久連接的兩個處理程序,具體如下:

$(".edit_dropdown").on('mouseenter', function() { 
    //Perform all mouseenter actions here. 
    //If necessary, test for different states and branch as required. 
}).on('mouseleave', function() { 
    //Perform all mouseleave actions here. 
    //If necessary, test for different states and branch as required. 
}); 

還有一點:由於各縣的列表是靜態的,你可以立刻上桌它作爲頁面的原始HTML的一部分。然後您只需要返回所選縣的名稱或ID,而不是重複返回整個列表。

+0

感謝您的信息,.on使腳本變得更加簡單,不幸的是,如果鼠標移動太快,mouseenter html更改無法在mouseleave之前完成。有沒有拖延鼠標葉? – Sherwood

+0

啊哈,這就是爲什麼我建議你考慮根據需要測試不同的狀態和分支。如果mouseover的ajax還沒有響應,我希望你需要以不同的方式處理mouseleave。我很難確切地說,因爲我不完全明白你想要達到的目標。 –

+0

感謝您的答覆,我試圖實現的是在用戶可以查看客戶詳細信息,如果他們將鼠標懸停在單元格上,然後文本成爲文本框或下拉根據單元格數據,這項工作正常一個文本框,我遇到的問題是,當編輯需要下拉時,文本變爲下拉菜單,並且與單元格html相同的值被選中。如果鼠標傳遞過快,mouseenter調用沒有時間在下拉菜單中獲取選定的項目,因此無法將其作爲新的HTML傳遞。 – Sherwood

相關問題