1

イベントクリックによってトリガーされた関数が初めて実行される方法を理解しようとしています。

関数のIDを変更しても実行されなくなると思いました。

jquery コードは引き続き元の DOM を参照しているようです。なんで?また、最初の実行後に DOM オブジェクトをアップグレードするにはどうすればよいですか?

$(document).ready(function () {
    $("#select1").on('click',function(){
      $(this).children().each(function () {
        globalObj[this.value] = this.innerHTML;
    });
      $(this).attr("id","select2");
      });
 });
4

2 に答える 2

2

関数のIDを変更しても実行されなくなると思いました。

いいえ、イベントが要素にバインドされると、その要素に設定されるため、どの属性を変更しても問題ありません。1つだけ実行したい場合は.one() 、または、使用できる関数のバインドを停止します.off()

jquery コードは元の DOM を参照し続けているようです

はい。jQuery はクロス ブラウザーであるため、クリック イベントをElement.addEventListenerorで割り当てますElement.attachEvent(ブラウザーによって異なります)。イベントを削除したい場合は、前述の解決策のいずれかを使用する必要がremoveEventListenerありdetachEventます。

于 2013-06-16T11:30:50.910 に答える
1

イベントはIDではなくDOM要素に関連付けられています。最初にIDで要素を取得し、DOMselect1オブジェクトを返します。新しい作成したことを意味しないIDを変更した場合、このオブジェクトのクリックイベントをバインドしますオブジェクトをアンバインドするだけでイベントを削除できます

$(this).unbind('click')
//OR
$(this).off('click')

イベントを一度だけ機能させる

$("#select1").one('click',... // the function is "onE" not "on" 
于 2013-06-16T11:33:33.027 に答える