如何使用变量在coffeescript中设置jQuery选择器?

时间:2015-05-21 18:48:34

标签: javascript jquery ruby-on-rails coffeescript

我正在编写一个Rails应用程序,我在同一页面上有多个表单,它们都有不同的ID。在咖啡脚本中,我试图设置标识符来访问每个文本区域。下面是浏览器中html的简单示例。

HTML

<a href="#" class="link" data-plan="1">Click here</a>
<form id="new_item_plan_1">
  <textarea id="plan_1_item_field"></textarea>
</form>

设置计划ID并尝试访问文本区域

plan_id = 0
$(".link").click ->
  plan_id = $(this).data("plan")
$("#plan_"+plan_id+"_item_field").keypress ->
  ...Some code...

所以我首先初始化plan_id变量,然后将其设置为.link的数据计划值。但我的关键新闻事件并没有在textarea上工作,我在控制台中没有出错。

当我创建测试链接并console.log时......

plan_id = 0
$(".link").click ->
  plan_id = $(this).data("plan")
$("#test).click ->
  console.log(plan_id)

它在控制台中打印正确的plan_id值就好了,所以我必须在textarea标识符中做错了。我出了什么问题?谢谢。

链接到jsfiddle,注意按键事件的工作方式https://jsfiddle.net/cfscr/175/

2 个答案:

答案 0 :(得分:2)

<a href="#" class="link" data-plan="1">Click here</a>
<form id="new_item_plan_1">
  <textarea id="plan_1_item_field" class='item-field' data-plan='1'></textarea>
</form>

plan_id = 0
$(".link").click ->
  plan_id = $(this).data("plan")
$(".item-field").keypress ->
  if $(this).data('plan') == plan_id {
     ...Some code...

你可以在文本区域使用正则表达式而不是另一个data标记,我只是懒惰;)

答案 1 :(得分:1)

你的代码中发生的事情是keypress绑定应用于页面加载,所以它只应用一次,而plan id仍为0.当plan_id更新时,它不会被重新应用。

我应该注意到这似乎是一件奇怪的事情,但你需要将绑定放在click事件中。也就是说,你想要

$("#plan_"+plan_id+"_item_field").keypress ->
  ...Some code...
每次触发click事件时都应用

。 要这样做,它必须正确缩进

plan_id = 0
$(".link").one 'click', ->
  plan_id = $(this).data("plan")
  $("#plan_"+plan_id+"_item_field").keypress ->
    ...Some code...

这将使得当用户点击按钮任意次数时,它将应用绑定到该按键。 这是你想要完成的吗?