循环访问DOM对象以进行单击

时间:2013-06-21 18:06:43

标签: jquery dom coffeescript

我有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的活动。我所做的是解析&#34; A&#34;具有&#34; id&#34;的对象包含&#34; show_device_dialog _&#34;然后尝试将一个函数挂钩到弹出对话框的对象。

现在,我对此很新,所以我通过蛮力做了一点:

$(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

这表明正在查找和处理这两个链接。然而,发生的事情是链接似乎没有&#34;点击&#34;触发器与它们相关联。此外,还会打开一个虚假的新浏览器窗口,就好像其中一个链接被点击一样。

没有多链接搜索块的pop代码本身工作正常,并且经过验证可以执行我想要的操作。所以,问题在于我如何处理&#34;发现&#34;我认为DOM对象。

有人能指出我的错误在哪里吗?

1 个答案:

答案 0 :(得分:0)

来自fine manual

  

.each(function(index,Element))

     

[...]回调是在当前DOM元素的上下文中触发的,   所以关键字this引用了元素。

因此,在$("a[id^='show_device_dialog_']").each回调中,@是原始DOM元素,而不是jQuery包装版本。这意味着你正在调用DOM元素的click方法,而不是jQuery。你想说:

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

演示:http://jsfiddle.net/ambiguous/An7CM/