我正在构建我的第一个Ruby on Rails应用程序(不是教程),它是旧VB6应用程序的一个端口。我有一个文本框,退出时(失去焦点)需要计算一个人的年龄,如果text_box不是空白,则需要禁用一些radiobuttons。 我可以让这个工作,但是当我进行原型设计时,我收到了一条警告信息。当text_box失去焦点时,警报会触发两次。我做错了什么,和/或是什么导致了这个。
虽然我可以删除警报,但我担心如果我打电话给脚本来计算人的年龄,那么它也会发射两次。
这是我的代码:
部分(_ person_registration.html.erb)
<fieldset>
<legend id="age_calcs">Age</legend>
<div class="span12">
<div class="span1">
<%= text_field_tag :age %>
<%= label_tag :age, "Age" %>
</div>
<div class="span10 form-inline">
<%= f.radio_button :age_unit, "years" %> <!-- #, :checked => true, :disabled => true -->
<%= f.label :age_unit_years, "Years" %>
<%= f.radio_button :age_unit, "months" %>
<%= f.label :age_unit_months, "Months" %>
</div>
</div>
<div class="span12">
<div class="form-inline">
<!-- <fieldset> -->
<%= label_tag :age_group, "Age Group" %>
<%= f.radio_button(:age_group, 0, :checked => true ) %>
<%= f.label(:age_group_adult, "Adult", :value => '0' ) %>
<%= f.radio_button(:age_group, 1) %>
<%= f.label(:age_group_child, "Child", :value => '1') %>
<%= f.radio_button(:age_group, 2) %>
<%= f.label(:age_group_infant, "Infant", :value => '2' ) %>
<!-- </fieldset> -->
</div>
</div>
</fieldset>
people.js
$(document).ready(function() {
$("input[type='text']#age").bind('focusout', function() {
{alert ('Age calculation - Not yet delivered')}
if ($(this).val().length != 0 ) {
$('input#patient_patient_detail_attributes_age_group_0').attr('disabled', true);
$('input#patient_patient_detail_attributes_age_group_1').attr('disabled', '');
$('input#patient_patient_detail_attributes_age_group_2').attr('disabled', '');
$('input#patient_patient_detail_attributes_age_group_child_3').attr('disabled', 'true');
// alert ('Age calculations');
}
else {
// alert ('Else portion');
$('input#patient_patient_detail_attributes_age_group_0').attr('disabled', false);
$('input#patient_patient_detail_attributes_age_group_1').attr('disabled', false);
$('input#patient_patient_detail_attributes_age_group_2').attr('disabled', false);
}
event.preventDefault();
})
});
此外,我可以在失去焦点时调用ruby方法来执行年龄计算,还是必须在javascript中进行计算?