2011-11-20 17 views
5

Mam wiązanie dla wielu wejść.Jak mogę sprawdzić, czy faktycznie zaznaczono pole wyboru?

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

Ponieważ istnieją inne sposoby inicjowania zmiany wejścia, (metoda .change jQuery() do jednego), Czy istnieje sposób, aby stwierdzić, czy pole zostało faktycznie kliknięciu spowodować zdarzenie zmiany?

Próbowałem ustawić ostrość, jednak zdarzenie fokusa jest uruchamiane przed zdarzeniem zmiany checkboxa, więc nie działa.

$("#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. 
}); 

Edit # 1

Niestety ja naprawdę nie wiem, jak to wyjaśnić dalej ... I nie obchodzi mnie, czy to pole wyboru jest zaznaczone, czy nie ... wiem co. is (": checked") jest i jak z niego korzystać. To nie pomaga tutaj. Chcę tylko wiedzieć, czy to pole wyboru rzeczywiście zostało kliknięte, aby wywołać zdarzenie zmiany.

Edit # 2

mam pracę wokół ... I najpierw powiązać kliknięcia dla wejść i wybiera i przechowywania identyfikatora elementu. Następnie w moim powiązaniu zmian sprawdzam, czy zmieniony element jest tym samym elementem, który został ostatnio kliknięty.

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

Następnie w powiązaniu zmian sprawdzam tylko, czy bieżący identyfikator jest równy identyfikatorowi ostatniego kliknięcia.

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

Może $ (this.id) pomoże ci to zidentyfikować. Sprawdź moją zredagowaną odpowiedź. Przepraszam, jeśli jadę w kółko. –

Odpowiedz

0

Oto jak rozwiązałem ten problem. Najpierw wiążę kliknięcia dla wejść, wybieram i przechowuję identyfikator elementu.Następnie w moim powiązaniu zmian sprawdzam, czy zmieniony element jest tym samym elementem, który został ostatnio kliknięty.

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

Następnie w powiązaniu zmian sprawdzam tylko, czy bieżący identyfikator jest równy identyfikatorowi ostatniego kliknięcia.

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

if ($ (this) .is (': sprawdzane')) ....

if ($ (this) .attr ('sprawdzone')) ...

EDYCJA: także, jeśli wszystkie pola wyboru są dla "rodziny", upewnij się, że tylko jedna może być sprawdzona przez określenie nazwy = te same dla wszystkich elementów i id = różne dla każdej pozycji.

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

Może muszę wyjaśnić moje pytanie ... Nie obchodzi mnie, czy pole wyboru jest zaznaczone, czy nie. Dbam o to, czy kliknięto, aby wywołać zdarzenie zmiany. – kasdega

0

można próbować robić:

 
$("#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. 
}); 

Nadzieja pomaga

10

oprawę do click zamiast change. Impreza click nadal będą wyzwalane, gdy stan pole wyboru jest zmieniany z klawiatury, ale event.pageX i event.pageY będzie 0 w tym przypadku, więc można napisać:

$("#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

Interesujące ... Nie dość, że dostaję to, czego potrzebuję. Wiązanie z "zmianą" jest z jakiegoś powodu. Kliknięcie nie oznacza zmiany za każdym razem, szczególnie w tej sytuacji, w której #foo jest polem wyboru. Jednak wszystko, co jest powiedziane, doskonały pomysł na stronę X, będę musiał to uwzględnić. – kasdega

-1

Spróbuj tego:

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

    or 

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

d własne vo te s? –

1

Odpowiedź Frédéric Hamidi jest dobra. Ale jeśli chcesz podnieść programowo "zmianę" zdarzenia, jego kod niestety nie zadziała. Jeśli naprawdę chcesz to, co opisałeś, wypróbuj tę wersję:

$('#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.

Powiązane problemy