Javascript:从Ruby on Rails生成的按钮访问“action”属性

Javascript: Accessing 'action' attribute from Ruby on Rails-generated button

本文关键字:访问 按钮 action 属性 Ruby on Rails Javascript      更新时间:2023-09-26

我的 RoR 应用程序视图中有以下代码行:

<%= button_to "Attend Event", attend_event_path(@event), :remote => true, :id => "attend", :class => "tester" %>

它生成以下代码:

<form class="button_to" method="post" action="/events/2/attend" data-remote="true">
    <input id="attend" class="tester" type="submit" value="Attend Event" /> 
    <input type="hidden" name="authenticity_token" value="1GDsVpuZ4nu3OqSUajEtv2gO4m1QASXcceKlw9FRjbMxKFIIYMr741fSVDA8VeXUAolGyY85d7LpvOjfhs4fVA==" />
</form>

现在,人们可以看到我的idclass被放在input标签中;我无法将它们放在 form 标签中。我需要一种方法从表单标签中的action键中提取/events/2/attend,但我无法添加 ID 来执行此操作,并且 document.getElementByClassName 不起作用。

以前,我有一个链接而不是一个按钮,document.getElementById("attend").getAttribute("href");做到了,但我正在尝试使用按钮,而不是链接。

有人可以向我建议一些允许我获取action键值的 Javascript 代码(或一些允许我在表单标签中添加 ID 的 ruby 代码)吗?我需要这个值作为 Ajax URL。

谢谢一堆

你可以从 child'. If you were not using jquery , then the pure javascript 遍历到parent , you could use either parentNode or parentElement to get the parent'。

请尝试以下操作:

var inputElement = document.getElementById("attend");
var formElement = inputElement. parentElement;
var formAction = formElement.action;

幸运的是,每个表单输入都有一个form成员,指向所有者"form",所以这简单地变成了:

var formAction = document.getElementById('attend').form.action;

这样做的好处是,您不需要关心输入字段的嵌套方式,即如果它不是表单的直接子级,则没有问题。

但是,最好的方法是在表单中添加显式 ID,如下所示:

form_for @model, html: { id: 'your-form-id' } do |f|

并像var formAction = document.getElementById('your-form-id').action;一样访问它