複数回の登録イベントにより、1つのイベントが複数回トリガーされます.

880 ワード

JavaScriptロジックでは、ボタンのclickイベントに関数が自動的にバインドされますが、このコードはイベントを繰り返し登録します.このようにonNext関数に依存すると,ボタンを1回クリックしたときに複数回トリガーされる.
これはJQuery内部が何度もバインドされているかどうかを判断しておらず,内部が配列でイベント関数を保存しているのではないかと疑い,また重さを落とさなかったためである.
次のコードはこの問題を予防した.ソリューションは簡単です.
	    if (!this.hasPageBarEvents) {
		$(".pNext").on("click", this, this.onNext);
		this.hasPageBarEvents = true;
	    }

これからJQueryを使うときはこの特性に気をつけてください.
jQueryはまた、jQuery 1でイベント処理関数を検索するための内部的な方法を提供する.8+バージョンで有効です.
次のコードはclickイベントの処理関数をチェックしますが、2未満の場合は登録されていないことを説明し、安心して追加できます.
	bindClick: function(jqueryObject, self, handler) {
	    var r = $._data(jqueryObject.get(0), "events");
	    if (r.click.length < 2) {
		jqueryObject.on("click", self, handler);
	    }
	},
clickには常に要素があり、その後も異なるブラウザでの動作を観察し続けます.Chromeでは問題ありません.