1

次のjsfiddleに注意してください:http://jsfiddle.net/RA3GS/4/

チェックボックスを手動でチェックすると、チェックされたときにチェックされたと表示され、チェックされたままになっていることがわかります。ただし、テストボタンを押すと、チェックされてからチェックが外れるか、チェックされていないことを示してチェックされていることがわかります。

問題は次のとおりです。事前にチェック値を設定しないことを選択した場合、チェックボックスは最後に正しくチェックされますが、クリックされた関数はチェックされていないことを誤って示します。チェックされた値を設定すると、click()関数はチェックボックスがチェックされていることを正しく示しますが、他のイベント(un)が最後にチェックボックスのチェックを外します。

jsfiddleはテストです。私の実際の実装では、input要素のclick()関数を制御できないため、click関数でログインを変更するだけではありません。

これは私が望む振る舞いです、正確には:

  • ボタンをクリックします。
  • クリック()関数がトリガーされ、チェックされる要素を信じます。
  • 他のすべてのイベントは、チェックボックスがチェックされていると信じています。
  • すべてが言われ、行われるとき、チェックボックスはまだチェックされています。

より簡単な例

ここにもっと簡単なjsfiddleを置きました:http: //jsfiddle.net/49jUL/

機能を変更せずに、statusどのチェックボックスをオンにしてもコンソールを同じように表示したい。現在の出力は次のとおりです。

マニュアルをクリック

A tester received the following event change
Value:  100  Checked:  true
A tester received the following event click
Value:  100  Checked:  true

コントローラをクリックする

A tester received the following event click
Value:  100  Checked:  true
A tester received the following event change
Value:  100  Checked:  false

change手動のラジオボタンをクリックすると、最初にが呼び出されてからが呼び出され、クリック clickをトリガーするとが呼び出されてからが呼び出されるのは興味深いことです。click change

私がそれを呼び出しようとしたとき$target.change().click()、それは単にchange、次にclick、そして最後にchange再びcheckedfalseに設定して呼び出すことに注意してください。

4

2 に答える 2

3

私のコメントから-

このcheckedフィールドは属性ではなくプロパティであるため、「チェック済み」ステータスには適切なアクセサーとミューテーターを使用することをお勧めします。

$('#checkBoxElId').prop("checked"); 

$('#checkBoxElId').prop("checked", true/false);

is()または、疑似セレクターで関数を使用して、:checkedチェックされているかどうかを確認することもできます。

$('#checkBoxElId').is(':checked');

「チェック済み」属性は、チェックボックスを最初にロードした後は変更されません。チェックボックスの状態の詳細については、のjQueryドキュメントを参照してください。prop()


編集:解決策

この動作を説明するバグレポートを見つけた後、バグのコメントに記載されている回避策を少し実験しました。triggerHandler("click")を呼び出す代わりにを使用しますclick()

click()はのショートカットでtrigger("click")あり、セレクターによって検出されたすべての要素で一致するイベントをトリガーし、ネイティブハンドラーも呼び出します。triggerHandler("click")、OTOHは、セレクターによって検出された最初の要素のイベントのみをトリガーし、デフォルトの(ネイティブ)動作が発生しないようにします。チェックボックスの「チェック済み」状態を台無しにしているのは、ネイティブの動作です。それを回避することで、目的の動作が得られます。

これが私のソリューションで更新されたjsFiddleです。

于 2012-05-15T16:47:35.880 に答える
0

チェックボックスのクリックを単純にトリガーすることはできません。現在のステータスを確認して、それに応じて行動する必要があります。

$('#pushbutton').on("click", function() {
    var $obj = $('#myCheckBoxID');
    $obj.prop('checked', !$obj.prop('checked'));
    alert('now check is: ' + $obj.prop('checked'));
});

このフィドルの例を参照してください!

編集済み

最初のコメントでThiefMasterによって与えられた改善に続いて。

于 2012-05-14T22:05:33.370 に答える