0

RailsでjQueryを使用するのは初めてで、クリックまたはホバーイベントで認識されるdivを取得できません。Coffeescriptも使用していますが、コンパイルは問題ないようです。Chrome開発ツールの要素ウィンドウではすべてのdivが見栄えがしますが、コンソールウィンドウにconsole.logが表示されません。

私の_form.html.hamlの一部

.field
  = f.label :question
  = f.text_field :question
%p Click the plus sign to add answers.
.field#answerone
  = f.label :answers
  = f.text_field :answers
#plusanswer
  = image_tag("plusWhite.png", :alt => "plus sign")

.actions
  = f.submit 'Save'

コーヒースクリプト:

$("#plusanswer").click ->
  console.log("here we are")
  $("#answerone").clone().appendto()

コンパイルされたJavaScript:

(function() {

  $("#plusanswer").click(function() {
    console.log("here we are");
    return $("#answerone").clone().appendto();
  });

}).call(this);

image_tagのやり方はめちゃくちゃですか?

4

1 に答える 1

3

セルジオのコメントは正しいと思います。JS がページのマークアップの前にある場合、セレクター$(#plusanswer')はその要素が存在する前に実行されます。コードでこれを確認できます

console.log $('#pluganswer').length

これを修正するには、次のようにコードを jQuery のドキュメント対応ラッパーでラップします。

$ ->
  # the rest of your code goes here

これは少し魔法のように見えますが、そのしくみは次のとおりです。関数を jQuery オブジェクト に渡すと、その関数は、 「準備完了」イベントが発生$した後にのみ実行されます。documentしたがって、コードがマークアップの前にあると再び仮定すると、次の動作が得られるはずです。

console.log $('#pluganswer').length    # 0
$ ->
  console.log $('#pluganswer').length  # 1, because the page's markup is loaded
于 2012-05-10T19:34:05.953 に答える