2011-11-20 24 views
5

Tôi có một ràng buộc cho nhiều đầu vào.Làm cách nào để biết một hộp kiểm có thực sự được nhấp không?

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something here 
    // do something extra here if $(this) was actually clicked 
}); 

Kể từ khi có những cách khác bắt đầu một sự thay đổi của một, (.change jquery() của phương pháp cho một) đầu vào, Có cách nào để biết một hộp kiểm đã thực sự nhấp vào để gây ra sự kiện thay đổi?

Tôi đã cố gắng tập trung tuy nhiên sự kiện trọng tâm sẽ kích hoạt trước sự kiện thay đổi của hộp kiểm để không hoạt động.

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something here 
    if($(this).is(":focus")) // do something extra here but focus doesn't happen here for checkboxes. 
}); 

Chỉnh sửa # 1

Xin lỗi tôi không thực sự biết làm thế nào để làm rõ điều này hơn nữa ... Tôi không quan tâm nếu hộp kiểm được kiểm tra hay không ... Tôi biết những gì. là (": checked") là và cách sử dụng nó. Nó không giúp gì ở đây. Tôi chỉ muốn biết liệu hộp kiểm có thực sự được nhấp vào để kích hoạt sự kiện thay đổi hay không.

Chỉnh sửa # 2

Tôi có một công việc xung quanh ... đầu tiên tôi liên kết nhấp chuột cho đầu vào và chọn lựa và lưu trữ các id của phần tử. Sau đó, trong ràng buộc thay đổi của tôi, tôi kiểm tra xem liệu phần tử đã thay đổi có phải là phần tử được nhấp lần cuối cùng không.

$("input, select").click(function() { 
    var myId = $(this).attr("id"); 
    lastClickedStore.lastClicked = myId; 
}); 

Sau đó, trong liên kết thay đổi, tôi chỉ kiểm tra xem ID hiện tại có bằng Id được nhấp cuối cùng không.

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something 
    if(lastClickedStore.lastClicked == $(this).attr("id")) // do something else. 
} 
+0

Có thể $ (this.id) sẽ giúp bạn xác định. Kiểm tra câu trả lời đã chỉnh sửa của tôi. Xin lỗi nếu tôi đang đi trong vòng kết nối. –

Trả lời

0

Vì vậy, đây là cách tôi giải quyết vấn đề này. Lần đầu tiên tôi liên kết các nhấp chuột cho các đầu vào và chọn và lưu trữ id của phần tử.Sau đó, trong ràng buộc thay đổi của tôi, tôi kiểm tra xem liệu phần tử đã thay đổi có phải là phần tử được nhấp lần cuối cùng không.

$("input, select").click(function() { 
    var myId = $(this).attr("id"); 
    lastClickedStore.lastClicked = myId; 
}); 

Sau đó, trong liên kết thay đổi, tôi chỉ kiểm tra xem ID hiện tại có bằng Id được nhấp cuối cùng không.

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something 
    if(lastClickedStore.lastClicked == $(this).attr("id")) // do something else. 
} 
0

if ($ (this) .là (': kiểm tra')) ....

if ($ (this) .attr ('kiểm tra')) ...

EDIT: cũng vậy, nếu tất cả các hộp kiểm là dành cho "gia đình", hãy đảm bảo chỉ có một hộp kiểm có thể được kiểm tra bằng cách xác định tên = the-same-for-all-items và id = khác nhau cho mỗi mục.

Ex: 

<input type='checkbox' name='fruits' id='orange' >orange 
<input type='checkbox' name='fruits' id='melon' >melon 
<input type='checkbox' name='fruits' id='banana' >banana 
<input type='checkbox' name='fruits' id='apple' >apple 
<input type='checkbox' name='fruits' id='...' >.... 

EDIT: if it was clicked: the id? 

console.log($(this.id)); 
+0

Có lẽ tôi cần làm rõ câu hỏi của mình ... Tôi không quan tâm nếu hộp kiểm được chọn hay không. Tôi quan tâm nếu nó được nhấp vào để kích hoạt sự kiện thay đổi. – kasdega

0

Bạn có thể thử thực hiện:

 
$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("click", function() { 
    // do something here 
    if($(this).is(":checked")) // do something extra here but focus doesn't happen here for checkboxes. 
}); 

Hy vọng nó giúp

10

Bind to click thay vì change. Sự kiện này click vẫn sẽ được kích hoạt khi nhà nước kiểm tra hộp được thay đổi với bàn phím, nhưng event.pageXevent.pageY sẽ 0 trong trường hợp đó, vì vậy bạn có thể viết:

$("#foo, #bar, #fooCheckbox, #barCheckBox").click(function(event) { 
    // Do something here... 
    if (event.pageX > 0) { 
     // Check box was clicked, do something extra here... 
    } 
}); 
+0

bravo ............. – Rafay

+0

Thú vị ... Nó không hoàn toàn có được tôi những gì tôi cần mặc dù. Các ràng buộc để "thay đổi" là vì một lý do. Nhấp chuột không có nghĩa là thay đổi mọi lúc, đặc biệt trong trường hợp này #foo là một hộp chọn. Tuy nhiên, tất cả những gì được nói, ý tưởng tuyệt vời về pageX, tôi sẽ phải kết hợp điều đó. – kasdega

-1

Hãy thử điều này:

<input type="checkbox" onClick="doSomething()"> 

    or 

$("#foo","#bar","#fooCheckbox","#barCheckBox").click(function(){ 
    doSomething(); 
}); 
+0

d riêng vo te s? –

1

Frédéric Hamidi câu trả lời là tốt. Nhưng nếu bạn muốn nâng cao một sự kiện 'thay đổi' theo lập trình, thì mã của anh ta, thật không may, sẽ không hoạt động. Nếu bạn thực sự muốn những gì bạn mô tả, hãy thử phiên bản này:

$('#foo, #bar').bind({ 
    click: function() { 
     alert('click ' + this.id); 
     if ($(this).hasClass('changed')) { 
      alert('click+change ' + this.id); 
      $(this).removeClass('changed'); 
     } 
    }, 
    change: function() { 
     alert('change ' + this.id); 
     $(this).addClass('changed'); 
    } 
}); 

Demo.

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