在用jquery ui selectable時候,在一個Table的tr上綁定了selectable的事件,其中一個td中有<a/>連結,綁定了click事件。
測試時發現<a/>連結的click事件沒反應,並且是在捲軸在頁面最頂端的時候,捲軸沒反應,在捲軸下移之後,click事件觸發了!
google找到一個類似問題的解答:http://forum.jquery.com/topic/selectable-dosn-t-fire-click-event
在selectable初始化的時候加一個屬性:distance,並且值設成大於0。嘗試之後,果然click事件能正常觸發了。
但是這又導致另一個問題,本來在<tr/>上click事件能直接選中該行,但是distance設成大於0之後,tr的click事件開始無效了。
根據jquery ui的開發人員解釋,selectable的時候思想是:select的動作不應該和click動作同時發生。就是說如果distance屬性為0(預設就是0)的時候,click事件即被認為響應select事件,自訂的click事件會被屏蔽掉。所以這似乎是一個無解的事情!
但是jquery ui屏蔽click事件的做法好像是在點擊的時候產生了一個helper div來顯示lasso(這個詞不知道是不就是selectable在滑鼠拖動時顯示的虛線框),就是這個lasso阻止了click事件的發生。有一個人給出了一個解決辦法:
var content = $('#content').selectable();
var _mouseStart = content.data('selectable')['_mouseStart'];
content.data('selectable')['_mouseStart'] = function(e) {
_mouseStart.call(this, e);
this.helper.css({
"top": -1,
"left": -1
});
};
試了一下,上面的代碼確實有效!