25

チェックボックスを変更するために、このjavascript/jQueryのスニペットを書きました。 http://jsfiddle.net/johnhoffman/crF93/

Javascript

$(function() {
    $("a").click(function() {
       if ($("input[type='checkbox']").attr('checked') == "checked")
           $("input[type='checkbox']").removeAttr('checked');
       else
           $("input[type='checkbox']").attr('checked', 'checked');
       return false;
    });

    $("input[type='checkbox']").change(function(){ 
        console.log("Checkbox changed.");            
    });    
});​

HTML

<input type="checkbox" />
<a href="#">Change CheckBox</a>​

興味深いことに、リンクをクリックするとテキスト ボックスが変更されますが、Chrome Web 開発者コンソールにメッセージを記録する関数を呼び出すフォーム変更イベントはトリガーされません。なんで?どうすればそれを行うことができますか?

4

2 に答える 2

26

変更が行われたことをイベントが認識できるように、変更イベントをトリガーする必要があります.trigger('change')

http://api.jquery.com/change/から:

説明:イベント ハンドラーを "change" JavaScript イベントにバインドするか、要素でそのイベントをトリガーします。

.on( "change", handler )このメソッドは、最初の 2 つのバリエーションと3 番目のバリエーションのショートカットです.trigger( "change" )

change値が変更されると、イベントが要素に送信されます。このイベントは、<input>要素、<textarea>ボックス、および<select>要素に限定されます。選択ボックス、チェックボックス、およびラジオ ボタンの場合、ユーザーがマウスで選択を行うとすぐにイベントが発生しますが、他の要素タイプの場合、要素がフォーカスを失うまでイベントは延期されます。

デモ:

http://jsfiddle.net/nPkPw/3/

チェーンの使用: http://jsfiddle.net/nPkPw/5/
ie$("input[type='checkbox']").trigger('change').attr('checked', 'checked');

于 2012-04-15T03:16:17.383 に答える
10

これは驚くべきことではありませんが、 msdnの非効果のリストにこれを追加できると思います。

  • 「このイベントは、値が変更されている間ではなく、コンテンツがコミットされたときに発生します。」
  • 「選択オブジェクトの選択されたオプションがプログラムによって変更された場合、onchange イベントは発生しません。」

あなたはいつでも.click()それをjsFiddleにすることができます

于 2012-04-15T03:16:07.007 に答える