2011-05-18 75 views
1

Safari上會出現此問題。我不明白的問題,在IE瀏覽器(這是第一),但也許有人能幫助我在此:排序後排序觸發排序jQuery UI

我有一個排序:

<ul id='srt'> 
    <li><a class='url' href='http://www.test.com'>test</a></li> 
    <li><a class='url' href='http://www.test1com'>test1</a></li> 
    <li><a class='url' href='http://www.test2com'>test2</a></li> 
</ul> 

和下面的腳本:

$(document).ready(function() { 
    $("#srt").sortable(); 

    $(".url").click(test); 
}); 

function test() { 
    $(this).text("done"); 
    return false; 
}> 

單擊一個鏈接會將文本更改爲「完成」,但拖動它也會將文本更改爲「完成」。但我不想點擊排序結尾處的鏈接。

就像我說:IE瀏覽器正在運行的功能像它應該,它按該鏈接並不會觸發綁定的點擊功能,但Safari瀏覽器也觸發點擊...

我如何避免這種情況從發生?

編輯:我創建了一個jFiddle這個,所以你可以試試看。

回答

5

其實我在當前的項目中遇到同樣的問題,而且我從一開始就沒有任何線索正常工作,但是在代碼發生一些變化後,它停止工作。問題是我做了很多改變,我無法想象是哪個造成了問題

在你的情況下,幸運的是更簡單。你絕對不應該在jquery中像這樣傳遞事件處理程序。使用此語法:

$(".url").click(function(){ 
    test(); 
}); 

This Works!

編輯: 我的歉意,它仍然在排序時觸發處理程序。兩種解決方案!

最好的一個:

$("#srt").sortable({ helper: 'clone' }); 
$(".url").click(function() { $(this).text("done"); }); 

使用助手:「克隆」選項避免插件運行元件上的處理程序。 (請注意,我包括測試()身入匿名函數,否則你將無法使用「本」)

醜陋一個和事業問題與事件冒泡:

$("#srt").sortable(); 

$(".url").live('click', function() { $(this).text("done"); }); 

這是隻是出於教學原因!因爲live()事件不在元素本身中,所以它們不會被排序觸發!

+0

我試過了,但它全部殺死了點擊功能。檢查此琴:http://jsfiddle.net/Aw2wD/ – patrick 2011-06-10 14:25:29

+0

是的,我很抱歉,因爲您通過測試()函數,然後使用$(本)到該功能;但是$(this)不再指向DOM元素,而是指向函數本身! Hwr我爲我們的問題找到了另一個更優雅的解決方案!檢查更新! – Bakaburg 2011-06-13 13:17:34

+0

我遇到了類似的情況,使用幫手「克隆」固定的問題。 – metric152 2011-10-12 19:52:08