【发布时间】:2016-04-19 04:16:21
【问题描述】:
作为动态表单的一部分,我有一个复选框字段,用于启用和禁用下一个输入字段(它们是一对,因此当您向表单添加新部分时,复选框和输入字段都添加在一起) .
.form-element
.checkbox
= f.label :foo_bool_field do
= f.check_box :foo_bool_field, class: 'foo-bool-field-form-toggle'
.desc_foo_bool_field= "text describing field"
.input
= f.label :bar_input_field
= f.text_field :bar_input_field, disabled: f.object.foo_bool_field
这一切都在 .form 类块中。
这是禁用的代码
$('.form').on('change', '.foo-bool-field-form-toggle', function(e) {
// disabling code goes here
});
如果我添加一些这些表单元素,然后单击文本“描述 foo_bool_field 的文本”,它仅启用/禁用第一组的输入表单。如果我在表单禁用代码上方抛出一个调试器并检查this,this 总是返回第一个集合。如果我单击实际文本框□,它会正常工作,禁用复选框并引用我实际单击的复选框的右侧this。
有什么想法吗?我尝试了一些不同的东西(click 而不是change 等),但这一切都回到了这样一个事实,即点击文本时,this 不是我点击的元素,我可以似乎没有过去。
【问题讨论】:
-
您期望
this指的是什么? jQuery 安排this引用事件中涉及的元素。 -
您还需要发布“禁用代码”,因为这可能就是问题所在。
-
没有看到您的“更改”处理程序代码,没有人可以提供帮助。
-
@Pointy 我期待
this指的是我点击的元素。但是,如果我创建 3 个集合并单击第三个集合中的文本,它指的是第一个集合,即使在它遇到禁用代码之前,如果我将debugger作为第一行中的“更改”处理程序代码。 -
生成的 HTML 是什么样的?
标签: javascript ruby-on-rails haml