2011-02-09 14 views
7
<input class="jProblemClass" id="Checkbox{%= ID %}" type="checkbox" onchange="problemPicker.onChangeProblemCheckBox('{%=ID %}');"/> 

Po pierwszym zaznaczeniu lub odznaczeniu nic się nie dzieje. Drugie kliknięcie Afetr, zadzwoń do mojej funkcji problemPicker.onChangeProblemCheckBox, ale najpierw otrzymuję ID. Czemu? Czy możesz mi pomóc?Włącznik Html checkBox nie działa

onChangeProblemCheckBox: function(id) { 
    if ($('#CheckBox' + id).attr("checked") == true) { 
     problemPicker.addToCheckProblems(id); 

     var checkboxes = $('.jProblemClass:checked'); 

     if ((checkboxes.length > general.limit) && (general.limit != 0)) { 
      alert('The limit of ' + general.limit + ' problems exceeded. Please deselect ' + (checkboxes.length - general.limit).toString() + '.'); 
     } 
    } else { 
     problemPicker.delFromCheckProblems(id); 
    } 
}, 
+1

Możesz chcieć nam pokazać, co robi ta funkcja - może problem jest tam ... – Rob

Odpowiedz

19

Bro użyć zdarzenia onclick zamiast onchange .. powodu ... Według odniesień Javascript czytałem, onChange pożary po ostrość jest stracone. Jeśli nie klikniesz gdzie indziej, fokus nie zostanie utracony w IE. Inne przeglądarki nie musi czekać na skupienie się być utracone przed wypalania onchange - które sugerują, że nie są one następujące spec poprawnie (mimo, że robi więcej sensu, aby ogień w tym punkcie). Jak na temat korzystania onclick i onkeydown/onkeyup zamiast (przy użyciu zarówno onclick i onkeyup/onkeydown pokryć zarówno ustawienia myszy i klawiatury z wyboru ). REFERENCJE: http://www.winvistatips.com/re-onchange-event-checkbox-not-working-properly-t311364.html

0

Myślę, że problem jest następujący: $('#CheckBox' + id).attr("checked") == true. Zgodnie ze specyfikacjami HTML, checked powinno być ustawione na "checked", kiedy to zdarzenie zostanie wywołane. Spróbuj użyć czegoś takiego, jak $('#CheckBox' + id).attr("checked") == "checked" lub nawet $('#CheckBox' + id).attr("checked").

Jako druga opcja, polecam użyć czystego jquery do uruchomienia rutyny. Na przykład, jeśli masz <input type="checkbox" id="ac"> wyboru, można użyć tego kodu JQ obsłużyć swoich procedur:

$(document).ready(function() { 
    $("input[type=checkbox]").change(function() { 
     alert("Am i checked? - " + $(this).attr("checked") + "\nMy ID:" + $(this).attr("id")); 
    }); 
}); 

Ten przypadek jest pokazany w this demo.

+0

Po zmianie zdarzenia 'onchange' na' onclick' wszystko działa. Ale jeśli używam onchange nic nie działa. – isxaker

+0

Może to oznaczać, że zamieniasz nie uruchamia się, dopóki nie zacznie strzelać onblur, spróbuj ustawić fokus na innym elemencie po zaznaczeniu tego pola. –

+0

Teraz próbuję to zrobić. – isxaker

0

Zamiast tego spróbuj użyć if($('#CheckBox' + id + ':checked').length > 0), w ten sposób doprowadziłeś jQuery do wykrycia, że ​​pole wyboru to checked lub nie.

Także jeśli onChangeProblemCheckBox używa żadnych właściwości wewnętrznych problemPicker ale nie referens je z pełną ścieżką, czyli problemPicker.nnnnn nie powiedzie się jako zdarzenie zostanie wyzwolony w kontekście elemencie bez problemPicker. Byłoby tak, jakby funkcja została nazwana tak: $('#CheckBox' + id).onChangeProblemCheckBox().