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

How do I set a jQuery selector in coffeescript using a variable?

我正在编写一个 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 变量,然后将其设置为 .links 数据计划值。但是我的按键事件在 textarea 上不起作用,我在控制台中也没有收到错误消息。

当我进行测试时 link 和 console.log 它...

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

它在控制台中打印出正确的 plan_id 值就好了,所以我一定是在文本区域标识符中做错了什么。我哪里错了?谢谢。

Link 到 jsfiddle,注意按键事件如何不起作用 https://jsfiddle.net/cfscr/175/

<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 标记,我只是懒惰 ;)

您的代码中发生的事情是按键绑定应用于页面加载,因此它仅在计划 ID 仍为 0 时应用一次。更新 plan_id 时不会重新应用。

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

$("#plan_"+plan_id+"_item_field").keypress ->
  ...Some code...

每次触发点击事件时应用。 为此,必须正确缩进

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

这样一来,当用户多次单击该按钮时,它会将绑定应用到该按键。 这是你想要完成的吗?