0

私はコーヒースクリプトに不慣れで、イベントへのバインドに問題があります。ajaxを介して更新されるdivがあり、返された部分にいくつかの追加のjqueryイベントを定義したいと思います。これはすべてレール3.2で実行されています。私のjs.erbはこの部分をうまく返します:

$('#top_box').empty()
$('#top_box').append('<%= escape_javascript(render :partial => 'form') %>')

フォームパーシャルには、追加のイベント処理を行うテキストフィールドが1つあります。

$('#link_long').on('click',function(){ $('#link_long').val("" );})

上記の行をjs.erbファイルに追加すると、すべてが正常に機能しますが、これがコーヒーでどのように行われるかを確認したいと思いました。だから、私はその行を次のようなコーヒーに翻訳しました

$ ->
  $('#link_long').on 'click', ->
    $('#link_long').val("")

コーヒー用に生成されたjsコードは

(function() {

 $(function() {
 return $('#link_long').on('click', function() {
 return $('#link_long').val("");
 });
 });

}).call(this); 

しかし、コーヒースクリプトは機能しません。誰かが理由を教えてもらえますか?

4

1 に答える 1

1

これは少し推測ですが、パーシャルが追加される前にイベントをバインドしている可能性があります。$('#link_long')要素がまだ存在しないため、要素が見つからないため、何も起こりません。JS-> CS変換の中断は、おそらくクリックハンドラーを独自の$ ->コールバックに移動したことでした。これも、ここでも推測しますが、が含まれているコールバックの前に実行appendされています。いずれにせよ、相互に依存する複数のドキュメント対応ハンドラーがあると、問題が発生します。

最も明白な選択は、追加後にバインドすることです。

$('#top_box').append('<%= escape_javascript(render :partial => 'form') %>')
$('#link_long').on 'click', -> $('#link_long').val("")

もう1つのオプションは、ドキュメントをバインドしてからセレクターでフィルター処理することです(フィルター処理はイベントがトリガーされたときに実行されるため、選択した要素が存在する前にバインドできます)。

$(document).on('click', '#link_long', -> $('#link_long').val(""))
于 2012-07-17T04:22:55.573 に答える