2013-10-02 82 views
2

我有一個可編輯元素,它本身是可點擊的div。每當我點擊x-editable錨點元素,點擊就會彈出DOM並觸發父div的點擊。我怎樣才能防止呢?我知道可以用jQuery的stopPropagation()來阻止這個,但我會在哪裏調用這個方法?X-Editable:停止傳播「點擊編輯」

下面是JSFiddle的問題:http://jsfiddle.net/4RZvV/。要複製點擊可編輯的值,你會看到包含div會捕獲一個點擊事件。當我點擊x-editable彈出窗口中的任何地方時,也會發生這種情況,我也想阻止它。 lightswitch05答案後

編輯

我有多個動態的DIV這應該是可選擇的,所以我不能使用全局變量。我在.editable-click錨上添加了一個屬性,取而代之。

editable-active是用於瞭解如果彈出打開或不

editable-activateable來代替知道如果.editable-click錨應該像對待它

$(document).on('shown', "a.editable-click[editable-activateable]", function(e, reason) { 
    return $(this).attr("editable-active", true); 
}); 

$(document).on('hidden', "a.editable-click[editable-activateable]", function(e, reason) { 
    return $(this).removeAttr("editable-active"); 
}); 

的檢查是非常喜歡你「已經說明它

$(document).on("click", ".version", function() { 
    $this = $(this) 

    // Check that the xeditable popup is not open 
    if($this.find("a[editable-active]").length === 0) { // means that editable popup is not open so we can do the stuff 
    // ... do stuff ... 
    } 
}) 

回答

3

有關鏈接的點擊,只需抓住click事件,並阻止它:

$("a.editable-click").click(function(e){ 
    e.stopPropagation(); 
}); 

內的點擊X編輯都有點棘手。一種方法是保存一個標誌天氣的X-編輯窗口打開與否,只有採取行動,如果X編輯關閉

var editableActive = false; 

$("a.editable-click").on('shown', function(e, reason) { 
    editableActive = true; 
}); 

$("a.editable-click").on('hidden', function(e, reason) { 
    editableActive = false; 
}); 

$("div.version").click(function(e) { 
    var $this; 
    $this = $(this); 
    if(editableActive === false){ 
     if ($this.hasClass("selected")) { 
     $(this).removeClass("selected"); 
     } else { 
     $(this).addClass("selected"); 
     } 
    } 
}); 

Fixed Fiddle

1

這不是很漂亮,但我們的東西解決了這個問題,如:

$('.some-class').click(function(event) { 
    if(event.target.tagName === "A" || event.target.tagName === "INPUT" || event.target.tagName === "BUTTON"){ 
    return; 
    } 

我們仍在尋找一種解決方案,不需要可點擊的特定標籤列表。