Rails 4:如何使用 Rails 中的 JQuery 禁用基于复选框值的文本字段
Rails 4: How to Disable Text Field Based on Checkbox Value Using JQuery in Rails
我在表单中有一个复选框和一个文本字段。如果复选框被选中,我想禁用该字段(如果它未被选中,我希望它被启用)。
我试着根据这个问题的第二个答案写了一些jQuery:
jQuery - checkbox enable/disable
但是,当页面加载时,文本字段 (foo_price) 被禁用,即使该字段未选中也是如此。我做错了什么?
我正在使用 Simple Form gem:
<%= simple_form_for @foo do |f| %>
<%= f.input :free_flag, as: :boolean %>
<%= f.input :price %>
<%= f.button :submit %>
<% end %>
表单呈现:
<form>
<input class="boolean optional" type="checkbox" value="1" name="foo[free_flag]" id="foo_free_flag" />
<input class="numeric decimal optional" type="number" step="any" value="12.99" name="foo[price]" id="foo_price" />
</form>
我的 Coffeescript:
enable_cb = ->
$('#foo_price').prop 'disabled', !@checked
return
$ ->
enable_cb()
$('#foo_free_flag').click enable_cb
return
当您在 DOM 上使用 enable_cb()
时,问题会直接加载 属性 checked
它指的是 window 对象而不是复选框元素
我建议使用 change
事件而不是 click
来检查 checked
属性。您应该使用 .trigger(event)
以编程方式执行事件处理程序。
enable_cb = ->
$('#foo_price').prop 'disabled', !@checked
return
$ ->
$('#foo_free_flag').change enable_cb
.trigger('change')
return
您可以使用 javascript/jquery 来执行此操作,查看此 fiddle
<input type = "text" class="txt1"/>
<input type="radio" class="radio1"/>
$(function(){
$(".radio1").change(function(){
alert($(".radio1").prop("checked"));
if($(".radio1").prop("checked") == true){
$(".txt1").prop("disabled", true);
}else{
$(".txt1").prop("disabled", false);
}
});
});
我在表单中有一个复选框和一个文本字段。如果复选框被选中,我想禁用该字段(如果它未被选中,我希望它被启用)。
我试着根据这个问题的第二个答案写了一些jQuery: jQuery - checkbox enable/disable
但是,当页面加载时,文本字段 (foo_price) 被禁用,即使该字段未选中也是如此。我做错了什么?
我正在使用 Simple Form gem:
<%= simple_form_for @foo do |f| %>
<%= f.input :free_flag, as: :boolean %>
<%= f.input :price %>
<%= f.button :submit %>
<% end %>
表单呈现:
<form>
<input class="boolean optional" type="checkbox" value="1" name="foo[free_flag]" id="foo_free_flag" />
<input class="numeric decimal optional" type="number" step="any" value="12.99" name="foo[price]" id="foo_price" />
</form>
我的 Coffeescript:
enable_cb = ->
$('#foo_price').prop 'disabled', !@checked
return
$ ->
enable_cb()
$('#foo_free_flag').click enable_cb
return
当您在 DOM 上使用 enable_cb()
时,问题会直接加载 属性 checked
它指的是 window 对象而不是复选框元素
我建议使用 change
事件而不是 click
来检查 checked
属性。您应该使用 .trigger(event)
以编程方式执行事件处理程序。
enable_cb = ->
$('#foo_price').prop 'disabled', !@checked
return
$ ->
$('#foo_free_flag').change enable_cb
.trigger('change')
return
您可以使用 javascript/jquery 来执行此操作,查看此 fiddle
<input type = "text" class="txt1"/>
<input type="radio" class="radio1"/>
$(function(){
$(".radio1").change(function(){
alert($(".radio1").prop("checked"));
if($(".radio1").prop("checked") == true){
$(".txt1").prop("disabled", true);
}else{
$(".txt1").prop("disabled", false);
}
});
});