2013-09-24 118 views
0

我想在每次點擊.step時將元素.editor集中在一起。問題是我想排除按鈕上的按鈕:.new,.delete,.copy,.resize。如果我點擊按鈕,我不會聚焦,只是分別執行其他功能設置。我怎樣才能做到這一點。 這是HTML結構:通過點擊元素來設置焦點,但排除了一些子元素

<div class="step"> 
<div class="editor"></div> 
    <div class="new"></div> 
    <div class="delete"></div> 
    <div class="copy"></div> 
    <div class="resize"></div> 
</div> 

這是我的錯jQuery的:

所有的
$(document).on('click', '.step', function() { 
    if ($(this) !== $(".sort-slides") || $(".draggable_on") || $(".copy-slide") || $(".new-slide") || $(".delete-slide") ) 
    $(this).find(".editor").focus(); 
}); 

回答

1

在JavaScript中,當一個事件在一個元素上觸發時,它在每個元素的祖先上觸發。這被稱爲事件傳播。可以通過從事件處理程序返回false來阻止此行爲。

$(".new, .delete, .copy, .resize").click(function(event) { 

    // do something 
    alert("click"); 

    // prevent the event from propagating 
    return false; 
}); 

$(".step").click(function() { 

    // do something 
    alert("focus"); 
}); 

這是CodePen上的example

但是,正如Gupta所說,focus函數僅適用於<input>,<select><a>標籤。

1

首先,你的if語句是不正確的。

if (x == 1 || 2 || 3 || 4 || 5) { ... } 

是不一樣的

if (x == 1 || x == 2 || x == 3 || x == 4 || x == 5) { ... } 

語句將始終返回true,因爲任何除了0將truthy。所以,即使X是0,該聲明將是

if (false || true || true || true || true) { ... } 

此外,$(this)永遠是.step DIV捕獲click事件,而不是任何的孩子。