2012-07-04 34 views
13

Tôi đang sử dụng .Trên function() với cú pháp này:JQuery sử dụng .Trên() với không Selector

$(".schemaTab").on("click", ".schema", function() {}) 

thay vì .live() bởi vì tôi thêm .schema divs động. Những div đó có mã này:

<div class="schema" id="SCH_16"> 
    <img src="Img/btnRemove.png" class="ikona SCH_Remove" alt="Smazat" title="Smazat"> 
</div> 

Nhưng tôi cần loại trừ img khỏi sự kiện nhấp chuột của div mẹ, vì vậy, bất kỳ ý tưởng nào để thực hiện?

tôi đã cố gắng:

$(".schemaTab").not(".SCH_Remove").on("click", ".schema", function() {}) 

... nhưng nó đã không làm việc và tôi không biết làm thế nào để thêm .not() bên trong .on() đang

Trả lời

16

.not() sẽ không làm việc vì on phương pháp xử lý sự kiện gắn với các thiết lập hiện đang được chọn của các yếu tố trong đối tượng jQuery và sử dụng bộ chọn ban đầu để kiểm tra liệu sự kiện có nên áp dụng hay không.

Vì vậy, tôi quyết định chọn và sau đó lọc trong trường hợp của bạn sẽ thực hiện thủ thuật.

API: http://api.jquery.com/on/

bạn có thể thử này:

$(".schemaTab").on("click", ".schema", function (e) { 

    if (!$(e.target).is(".schemaTab")) { 
     // not stuff in here 
    } 

}); 
+0

'this' sẽ luôn bị ràng buộc với phần tử đã được kiểm tra; Tôi nghĩ bạn có nghĩa là 'e.target'. – Ryan

+0

@minitech Ah cảm ơn và ++ 1 cho bài đăng của bạn ở trên, cổ vũ ':)' –

3

Toàn bộ vấn đề để làm điều này là để xử lý sự kiện trên các phần tử chưa có trong DOM, bao gồm .sch_Remove của bạn.

$(".schemaTab").on("click", ".schema", function() {}) 

Để ngăn tác vụ nhấp chuột mẹ được kích hoạt khi nhấn img, hãy thêm phần sau (ngoài chức năng của bạn ở trên).

$(".schemaTab").on("click", ".SCH_Remove", function() { return false; }) 

Điều này sẽ ngăn sự kiện 'click' truyền đến phụ huynh và kích hoạt phương pháp onclick và ngăn hành vi nhấp mặc định.

+0

Chỉ cần bạn biết, mặc dù img hiện là điều duy nhất trong div của bạn hai dòng mã này về cơ bản hủy bỏ lẫn nhau. Tôi cho rằng bạn sẽ thêm những thứ khác? nếu không bạn có thể cần phải suy nghĩ lại cách tiếp cận của bạn – nbrooks

4

Chỉ cần chắc chắn rằng các mục tiêu phù hợp:

$('.schemaTab').on('click', '.schema', function(e) { 
    if(!$(e.target).is('.schema')) { 
     return; 
    } 

    // Do stuff 
}); 
3

Tôi chỉ chạy vào vấn đề này, và sử dụng: không selecter, như vậy:

$('.schemaTab').on('click', '.schema:not(.booga)', function(event) { 

// Fun xảy ra ở đây });

Tôi đang sử dụng jQuery 1.11.0, tôi không biết cách hoạt động của tính năng này.

+0

điều này dường như trả lời câu hỏi –

Các vấn đề liên quan