jQuery プラグインCheckTreeを使用して、選択可能な項目のツリーを実装しようとしています。デモ ページ (上のリンク) には jQuery 1.2.6 が含まれています。ご想像のとおり、私のサイトにはもっと新しいものがあります。
試行錯誤の結果、デモが jQuery バージョン 1.5.2 以降で動作しなくなることが確認されました。興味深いことに、リリース ノートによると、jQuery 1.5.2 は単なるバグ修正リリースであり、重大な変更は導入されていません。私は問題を最も単純な形に煮詰めました:
<!DOCTYPE html>
<html lang="en-gb">
<head>
<meta charset="utf-8">
<title>Breaking change in jQuery 1.5.2?</title>
</head>
<body>
<input type="checkbox">
<button>Click me</button>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
<script>
$(function(){
$(':checkbox').change(function(){ console.log('input checkbox change event'); });
$("button").click(function(){
console.log('button clicked');
$(":checkbox").click();
});
});
</script>
</body>
</html>
jQuery 1.5.1 では、ボタンがクリックされたときにチェックボックスの変更イベントがトリガーされません。jQuery 1.5.2 では、change イベントがトリガーされます。
別の言い方をすれば、jQuery 1.5.1 を使用している場合、ボタンをクリックすると、次のコンソール出力が表示されます。
button clicked
jQuery 1.5.2 を使用している場合、ボタンをクリックすると次のログが記録されます。
button clicked
input checkbox change event
この変更が行われた理由と、それを回避するためにできることを説明するドキュメントはありますか? プラグインでは、チェックボックスの変更イベントが によってトリガーされないようにする必要があります$(":checkbox").click()
。