【发布时间】:2018-10-03 16:33:24
【问题描述】:
我的目标是能够为我创建的表单添加首选项...我创建了一个包含以下字段的对象数组...
var preferences =[{
base_field:"field1",
base_value:"1",
preference_type:"change",
target_field:"field2_div legend",
target_value:"New Field 2 Legend"
},
{
base_field:"field1",
base_value:"2",
preference_type:"change",
target_field:"field2_div legend",
target_value:"New Field 2 Legend"
}];
$.each(preferences, function(key, preference){
var baseField = $("#" + preference.base_field);
var baseValue = preference.base_value;
var targetField = $("#" + preference.target_field);
var targetValue = preference.target_value;
if (preference.preference_type == 'change') {
var originalValue = targetField.text();
baseField.change(function(){
if(baseField.val() === baseValue){
targetField.text(targetValue);
}
if(baseField.val() !== baseValue){
targetField.text(originalValue);
}
});
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="field1_div">
<fieldset>
<legend>Field 1 Legend</legend>
<label for="field1">Field 1</label>
<select id="field1" name="field1">
<option value="" selected>Field 1</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</fieldset>
</div>
<div id="field2_div">
<fieldset>
<legend>Default Field 2 Legend</legend>
<input id="field2" type="text" name="field2">
</fieldset>
</div>
我希望当 #field1 的值从“默认字段 2 图例”变为“新字段 2 图例”时更改为“1”或“2”,然后如果 field1 更改为非 '1' 或 '2' 的值,'#field2_div legend' 的文本将恢复为 'Default Field 2 Legend'
我的问题是当 field1 = "2" 时只有最后一个更改函数...我认为这是因为更改函数被覆盖了。关于如何重写它以获得更具可扩展性的方法的任何想法?
【问题讨论】:
-
您正在创建两个更改事件处理程序,每个规则一个。它没有被覆盖。为什么同一个元素有两个基值偏好规则?
-
@Taplar 我需要能够将 '#field2_div legend' 的文本设置为 'New Field 2 Legend' 只要 1 或 2 是 '#field1' 的值 - 所以基值将是 1 或 2,因此有 2 条规则。
-
您将两个更改事件绑定到同一个
select,它们将被一一执行,因此您只会看到您绑定的最后一个事件的更改。 -
@SamCraven 肯定是因为你只需要一个包含两个字段的规则,一个用于它可以切换的每个基值?或者可能是一组基值,以增加灵活性?因为除此之外,您的规则是相同的,看起来就像是多余的重复。
-
@Hikarunomemory 关于如何将其重写为单个更改函数以检查所有首选项定义的基值并相应地更新目标字段的任何想法?
标签: javascript jquery arrays object foreach