首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得单击的DOM元素?

如何获得单击的DOM元素?
EN

Stack Overflow用户
提问于 2014-07-19 23:11:27
回答 3查看 473关注 0票数 0

一般来说,在纯js或jquery中,或者在rails上下文中,如何获得单击的DOM元素?

通常您会这样做,允许您使用$(this).whatever_method

代码语言:javascript
复制
$(#something).on('click', function()
{
  $(this).do_something;
}_;

但在我的例子中,我的html中有一个远程链接: true,在我的控制器中,我呈现了一个js.erb文件。在这种情况下,将执行js.erb文件中的所有javascript代码。没有一个点击监听器的位置,因为这个js.erb文件执行的唯一原因是已经单击了一些东西。但我确实希望选择单击的DOM元素。我该怎么做?

我不想简单地手动选择它,因为这不是非常动态或可重用的(另外,我必须注入逻辑来选择正确的逻辑)。

html

代码语言:javascript
复制
<%= link_to "text", send(some_path, @votable, vote_type: "#{s.name}"), remote: true, class: "option" %>
<%= link_to "text", send(some_path, @votable, vote_type: "#{s.name}"), remote: true, class: "option" %>

控制器

代码语言:javascript
复制
def action
  render 'shared/vote'
end

/views/shared/vote.js.erb

代码语言:javascript
复制
// how to obtain the link that i clicked in the html file (i.e. the first `".option"` link rather than the second.
// would using `$(this)` here, work? it seems wrong.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-20 09:53:49

Ajax

即使您使用的是remote: true,仍然有一个click侦听器的空间。最好将ajax钩与发起远程ajax调用的元素一起使用:

代码语言:javascript
复制
$(document").on("ajax:beforeSend", "#your_element", function(){
   $(this).hide(); -> hides element
});

我认为您将能够在示例中的.click事件绑定器上使用此方法。原因是,虽然您可以调用click,但它基本上不会对ajax调用产生任何影响;而使用ajax hooks之一将对其产生一定影响。

--

Rails

关于您的Rails后端(您的.js.erb文件),您将无法将$(this)引用到应用程序的该部分。JS使用DOM的原因--这意味着它只能观察屏幕上的元素和正确的函数范围内的元素。

如果您想直接与链接交互,您应该考虑使用我前面提到的ajax钩子之一,页面交互性由前面提到的后端.js.erb文件提供。

票数 2
EN

Stack Overflow用户

发布于 2014-07-20 02:09:41

实际上,您的想法有点错误,因为js.erb将在向服务器发送新请求后执行,因此您将无法将它与当前的DOM元素链接起来。

为了实现您的目标,我认为您应该为每个链接分配一个唯一的ID,然后将该ID与请求params一起传递给服务器。然后在您的js.erb上,您将能够使用该ID来正确识别已单击的链接。

例如:

代码语言:javascript
复制
<%= link_to "Test link", some_path(link_id: "link_1"), remote: true, id: "link_1" %>

<%= link_to "Test link 2", some_path(link_id: "link_2"), remote: true, id: "link_2" %>

控制器

代码语言:javascript
复制
def my_action
    @link_id = params[:link_id]
end

js.erb

代码语言:javascript
复制
console.log($("#<%= @link_id %>"));
票数 2
EN

Stack Overflow用户

发布于 2014-07-19 23:24:55

在Vanilla JavaScript中,回调函数中的addEventListener函数中的this是触发事件的元素。

请参考这个小提琴

标记:

代码语言:javascript
复制
<input type="button" value="Click Me" id="button" />

JavaScript

代码语言:javascript
复制
document.querySelector('#button').addEventListener('click', function(e){
    console.log(this);
})

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24845835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档