【JS】$().clickイベントはトリガできません.

2224 ワード

JSコード:
var tpl = "
  • " + "" + "" + timestart + "----" + "" + timeend + "" + "" + "" + "
  • "; $('#sometime').append(tpl); $(".edit").click(function () { alert(1); });
    しかし、私はclass="edit"のspanタグをクリックしても触発しません.
    あら、またこんな問題ですか?
  • まずクリックできない原因を言います.
  • は簡単です.jqが見つけられないから.editという種類です.jsは読みながら実行しているとはいえ、本当に読みながら実行しているわけではない.ご存知のように、ブラウザの中には二つのスレッドがあります.一つはレンダリングで、一つはjsで、レンダリングスレッドが働いている時、jsのスレッドは休憩中であり、同じように、jsスレッドが働いている時、レンダリングスレッドは寝坊しています.
  • で、jsはこのようにあなたのコードを読みます.えっと、このようなliを挿入します.はい、仕事が終わったら、レンダリング兄にliを挿入させます.それから彼は引き続き読みました.うん、名前を探しています.editという種類があります.このような事件を結びつけてくれます.はい、文書の中を探してみます.あら、ないですね.いいです.後はコードがありません.よかったです.仕事が終わったら、レンダリング兄さん、あなたが出勤します...兄をレンダリングして出勤しますと、js兄のがliを挿入しますhtmlのドキュメントの要求を受け取って、レンダリング兄は1つの魔法を放して、liを挿入して入って、それからhtmlのドキュメントを更新して、それから局部は再び配置します.
  • ですので、jqは'.edit'を見つけられません.これはしょうがないです.jsはこのclick事件を読んだ時、まだ文書の中にありません.だから、知らない人は無罪ですか?
  • 解決方法を教えてください.きっと事件の依頼です.
    $(document).on('click','.edit',clickEventFunction);
    
  • ここでもうちょっとくどいです.このように書いたら、jsはこう読みます.documentがクリックされた時、これを見てください.editの種類がクリックされました.はい、このclickEventFunctionを実行します.うん、これは簡単です.レンダリング兄さん、後で誰かがdocumentをクリックしたら、documentの下のこの種類をクリックしました.大声で起こしてください.何をしたいですか?
  • このようにすると、挿入するクラスがドキュメント内にあるかどうかに関わらず、クリックされるとjsスレッドが起動され、存在するとjsはクリックイベントを処理します.
  • ですが、以下のような書き方を勧めます.
      function $domOfSth(text){
          var $obj=$('
  • ..'+text+'..
  • '); $obj .on('click','.edit',clickEventFunction) .on('mouseover','.otherClass',hoverEventFunction) ... /* */ $obj.css('color','red'); return $obj }
  • このようにして、イベントを挿入する対象の中に一度に結びつけることができます.また、一目で分かります.読み書きのメンテナンス性もいいです.
  • From:https://segmentfault.com/q/1010000006801225