2013-06-21 117 views
1

我有Ruby/Rails代码,它可以根据DB拉来生成一组链接。生成的链接看起来是这样的:通过DOM对象循环点击

<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来捕获'click'事件。我所做的是使用包含“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-"[email protected]+"\">Loading form...</div>").dialog(
     autoOpen: false 
     width: 520 
     modal: true 
     open: -> 
      $(this).load url + " #content" 

     close: -> 
      $("#dialog-form"[email protected]).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 

这表明这两个链接正在被发现和处理。但是,会发生的情况是链接似乎没有与它们关联的“点击”触发器。另外,虚假的新浏览器窗口会打开,就像其中一个链接已被点击一样。

弹出代码本身,没有多链接搜索块,工作正常,并验证做我想做的。所以,我认为问题在于我如何处理“找到的”DOM对象。

有人能指出我正确的方向我的错误在哪里吗?

回答

0

fine manual

。每个(函数(指数,元素))

[...]回调在当前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/

+0

谢谢。我完全错过了。回答正确,解决问题,并愉快接受。 – MichelV69