1

DB プルに基づいて一連のリンクを生成する Ruby/Rails コードがあります。結果のリンクは次のようになります。

<a href="/show_device_dialog" id="show_device_dialog_1">Call Customer 1</a> 
<br />
<a href="/show_device_dialog" id="show_device_dialog_28">Call Customer 28</a> 
<br />

ユーザーがリンクをクリックすると、先に進む前にいくつかのオプションを確認するダイアログが開きます。そのために、UJS を使用して「クリック」イベントをトラップしようとしています。私がしているのは、「show_device_dialog_」を含む「id」を持つ「A」オブジェクトのコンテンツを解析し、ダイアログをポップする関数をそれらにフックしようとすることです。

今、私はこれにかなり慣れていないので、力ずくで少しやっています:

$(document).ready ->
  console.log "building show_device_dialog..."
  $("a[id^='show_device_dialog_']").each ->
    console.log "...loop..."
    @click (e) ->
      dialog_form = undefined
      url = undefined
      dialog_form = undefined
      url = undefined
      url = $(this).attr("href")
      dialog_form = $("<div id=\"dialog-form-"+@id+"\">Loading form...</div>").dialog(
        autoOpen: false
        width: 520
        modal: true
        open: ->
          $(this).load url + " #content"

        close: ->
          $("#dialog-form"+@id).remove()
      )
      dialog_form.dialog "open"
      e.preventDefault()

    console.log "...done*"

ページが読み込まれると、コンソールに次のように表示されます。

building show_device_dialog... contacts.js:3
...loop... contacts.js:5
...done* contacts.js:28
...loop... contacts.js:5
...done* contacts.js:28

これは、2 つのリンクが検出され、処理されていることを示しています。ただし、リンクに「クリック」トリガーが関連付けられていないように見えます。さらに、リンクの 1 つがクリックされたかのように偽の新しいブラウザ ウィンドウが開きます。

マルチリンク検索ブロックのない pop コード自体は正常に動作し、私が望むことを実行することが検証されています。したがって、問題は、「見つかった」DOM オブジェクトをどのように処理しているかにあると思います。

私の間違いがどこにあるかについて、誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

細かいマニュアルから:

.each( 関数(インデックス, 要素) )

[...] コールバックは現在の DOM 要素のコンテキストで起動されるため、キーワードthisは要素を参照します。

したがって、$("a[id^='show_device_dialog_']").eachコールバック内に@は、jQuery でラップされたバージョンではなく、生の DOM 要素があります。つまりclick、jQuery のメソッドではなく、DOM 要素のメソッドを呼び出しているということです。あなたは言いたい:

$("a[id^='show_device_dialog_']").each ->
  console.log "...loop..."
  $(@).click (e) ->
    #...

デモ: http://jsfiddle.net/ambiguous/An7CM/

于 2013-06-21T18:27:51.807 に答える