2013-01-08 32 views
8

Tôi đã sau đánh dấujQuery: nhấn yếu tố lồng nhau

<ol> 
    <li class="ListItem"> 
     <span class="sub">@qItem.CategoryText</span> 
     <input type="image" src="http://icons.iconarchive.com/icons/tatice/just-bins/256/bin-red-full-icon.png" width="30" class="deleteIcon" name="QuestionId" value="@qItem.Id" /> 
    </li> 
</ol> 

và kịch bản sau đây

$(".ListItem").click(function(){ 
doActionA(); 
}); 

$(".deleteIcon").click(function(){ 
doActionB(); 
}); 

Khi tôi nhấp vào hình ảnh, nó cũng gây nên click ListItem. Tôi hiểu điều này là bởi vì hình ảnh bên trong ListItem. nhưng tôi muốn nhấp chuột của ListItem không được kích hoạt khi hình ảnh được nhấp. Có cách nào để làm điều đó không?

Trả lời

19
$(".deleteIcon").click(function(e){ 
    doActionB(); 
    e.stopPropagation(); 
}); 
+0

Điều này đã hiệu quả! –

4

Bạn cần phải sử dụng event.stopPropagation() để ngăn chặn sự kiện từ bọt lên cây DOM.

$(".deleteIcon").click(function(event){ 
    event.stopPropagation() 
    doActionA();  
}); 

Sự kiện bạn đã ràng buộc với biểu tượng xóa đang kích hoạt sự kiện ràng buộc cha mẹ với ListItem, vì vậy bạn cần dừng tuyên truyền cho sự kiện chính khi con là nguồn sự kiện.

+0

ông muốn ngăn chặn nhấp chuột trường hợp cha mẹ khi nhấp vào đứa trẻ. Bạn có nghĩ rằng 'event.stopPropagation()' nên được thêm vào nhấp chuột của trẻ không? –

+0

Sự kiện ràng buộc con sẽ không kích hoạt sự kiện cho phụ huynh. – Adil

+0

Tôi nghĩ rằng nó, hãy nhìn vào điều này: http://jsfiddle.net/arvind07/WtxLC/ Hãy thử nhận xét 'event.stopPropagation()' –

0
$(".deleteIcon").click(function(){ 
    doActionA(); 
    return false; 
}); 
0

Sử dụng .Một(), theo chỉ dẫn trong tài liệu JQuery.

1
$(document).on("click", ".deleteIcon", function() { 
    doActionB(); 
}); 

Phương pháp này là người duy nhất tôi tìm thấy để làm việc với các yếu tố lồng nhau, đặc biệt là những tạo ra bởi một thư viện như PivotTable (https://github.com/nicolaskruchten/pivottable)

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