-1

can.js を使用しているページがあるため、jsfiddle.net で再現するのは困難ですが、最終結果は次のようになります。

チェックボックス (またはラジオ ボタン) をクリックすると、別のinputテキスト ボックスがクリックによる変更を更新します。(たとえば、テキスト ボックスには「青」と表示されます)。

ただし、Firebug のコンソールまたは Chrome の開発者ツール コンソール内で jQuery を使用してプログラムで実行すると、次のようになります。

$("#some-form input:eq(3)").trigger("click");  

また

 $("#some-form input:eq(3)").click();

Webページのチェックボックスは実際にチェックされますが、inputテキストボックスの値は以前のように「青」に更新されません。

したがって、コードを使用してチェックボックスをクリックするユーザーをさらに厳密にエミュレートするために、次のことを試しました。

$("#some-form input:eq(3)").trigger("focus");
$("#some-form input:eq(3)").trigger("mousedown");
$("#some-form input:eq(3)").trigger("mouseup");
$("#some-form input:eq(3)").trigger("click");
$("#some-form input:eq(3)").trigger("change");

ただし、上記のすべてを合わせても、チェックボックスを手動でクリックするユーザーをエミュレートすることはできません。

can.js コードが can.compute() または can.Observe() を使用してそのinputテキスト ボックスを更新していたのは複雑な場合がありますが、重要なのは、ラジオまたはチェックボックスを手動でクリックするユーザーが機能するかどうかです。なぜプログラムではないのですか。言い換えれば、実際の物理的なクリックとほとんど同じことをプログラムで行うにはどうすればよいでしょうか? おそらく見逃したイベントはありますか?

(詳細: これは最新の Firefox と Chrome で試行されているため、ブラウザーの問題ではないはずです。また、最初にフォーカスを試みてから、SPACE 文字でキーダウン イベントをトリガーしても効果はありません。 . さらに奇妙なのは、クリックを 2 回トリガーすると、inputテキスト ボックスに実際に「青」への更新が表示されるので、なぜ 2 回かということです)。

4

1 に答える 1

-1

答えは、jQuery のバグによるものです。

http://bugs.jquery.com/ticket/3827

以下を使用して再現できます。

// strange behavior:
$("#some-form input:eq(3)").click();

そして、ネイティブに置き換えられた場合click:

document.getElementById("some-form").getElementsByTagName("input")[3].click();

その後、Chrome、Safari、および Firefox で完全に動作します。

そのため、修正は 2013 年 1 月 15 日の jQuery 1.9 で公開されたようです。

詳細は次のとおりです: jQuery では、チェックされていないチェックボックスをクリックした後、イベントハンドラーがチェックされていないことを報告するのはなぜですか?

于 2013-04-02T23:40:40.763 に答える