【问题标题】:Passing id of an object through an onclick function of jquery in Ruby On Rails通过 Ruby On Rails 中 jquery 的 onclick 函数传递对象的 id
【发布时间】:2014-07-04 23:47:50
【问题描述】:

我有一个控制器VendorController。查看文件为index.html.erb

我想通过 onclick 函数传递供应商的 ID。 这是我的代码

vendors_controller.rb下的代码

def index
  @vendor = Vendor.all
end

index.html.erb的代码

<script language="javascript" type="text/javascript">
function func1(id) {
    alert(_id);
}

function func2(id) {
    alert(id);
}
</script>


<% @vendors.each do |vendor| %>
  <tr>
    <td><%=link_to vendor.name , '#',  onclick: "func1(1)", remote: true %></td>
    <td><%= link_to vendor.id, '#', :onclick => 'func2(vendor.id)' %></td>
  </tr>
<% end %>

对于func1(),我收到了警报。但是对于func2,我没有得到任何回应。 请帮助..提前谢谢你。

【问题讨论】:

  • 您的 javascript 不在 javascript 标记中,并且您在第一个函数中引用了 _id 而不是 id
  • 只在javascript标签下... k我正在更新

标签: javascript jquery ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

我认为您只需要转义 onclick 的内容即可在其中包含实际的 id,而不仅仅是一个说“vendor.id”的字符串 - 请记住它只是一个字符串,因此它需要包含正确的数据当它被加载到浏览器中时。

试试

<td><%= link_to vendor.id, '#', :onclick => "func2(#{vendor.id})" %></td>

注意双引号,以允许字符串插值。

【讨论】:

  • 然后会发生什么?任何 javascript 错误?有什么吗?
  • 在控制台vendor is not defined
  • 我希望因为 vendor 是 rails 中的变量,而不是 javascript 中的变量。您确实了解此 html 和 javascript 是在服务器上生成,但在浏览器中运行对吗?
  • &lt;%= link_to vendor.id, '#', :onclick =&gt; "func2(#{vendor.id})" %&gt; 这样的 erb 标签在你的服务器上被评估(也就是渲染),在 Rails 中,以制作一个静态的文本页面发送回浏览器。然后浏览器运行这个页面。所以上面例子中的vendor 是服务器上rails 中的一个变量。生成的文本将类似于&lt;a href="#" onclick="func2(123)"&gt;123&lt;/a&gt;vendor 未在生成的文本页面上的任何位置定义,因此任何 javascript 都无法引用。
  • 顺便说一句(应该可以),而不是你的问题。
【解决方案2】:

@max-williams 的回答应该可以解决您的问题。但我还建议您探索将记录 ID 作为数据属性嵌入到 &lt;tr&gt; 标记中的选项,而不是写出 onclick 函数。然后在您的 JS 中,您可以在事件侦听器中动态选择 ID。

考虑:

<tr data-id="<%= vendor.id %>">
  <td><%= link_to vendor.id, '#', :class=>"vendor-link" %></td>
</tr>

然后只听点击:

$( ".vendor-link" ).click(function() {
  id = $(this).closest("tr").data("id");
  alert(id);
});

此方法会将您的 JS 从您的 HTML 模板中分离出来,并使其更易于管理。此外,您还可以附加多个点击功能,为您提供更多的灵活性。

【讨论】:

  • 这是真的,最好不要在模板代码中使用 onclick 属性,而是将所有 JS 收集在一起。
猜你喜欢
  • 2011-11-15
  • 2018-07-09
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多