使此代码在选择选项更改时更新
getting this code to update on select option change
<!--js-->
function changeValue(dropdown,source) {
var option = dropdown.options[dropdown.selectedIndex].value;
if (option == '1' && source==0) {
var total = 20;
$("span").text(total);
$('.balance').attr({"min":0, "max":total}).on('input', function() {
var value = parseInt(this.value);
var otherInputs = $('.balance').not(this);
var remainderDiv;
var remainder, sum;
if (isNaN(value)) {
value = 0;
} else if (value > total) {
value = total;
} else if (value < 0) {
value = 0;
}
this.value = value;
remainder = total - value;
remainderDiv = remainder / otherInputs.length;
sum = value;
$.each(otherInputs, function(input) {
sum += Number(otherInputs[input].value);
});
if (sum > total) {
otherInputs.val(remainderDiv);
}
});
}else if (option == '2' && source==0) {
var total = 20;
$("span").text(total);
$('.balance').attr({"min":0, "max":total}).on('input', function() {
var value = parseInt(this.value);
var otherInputs = $('.balance').not(this);
var remainderDiv;
var remainder, sum;
if (isNaN(value)) {
value = 0;
} else if (value > total) {
value = total;
} else if (value < 0) {
value = 0;
}
this.value = value;
remainder = total - value;
remainderDiv = remainder / otherInputs.length;
sum = value;
$.each(otherInputs, function(input) {
sum += Number(otherInputs[input].value);
});
if (sum > total) {
otherInputs.val(remainderDiv);
}
});
}
}
<!--html-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select onchange="changeValue(this,0)">
<option value="1">1-person</option>
<option value="2">2-10 group</option>
</select>
<input type="number" class="balance">
<input type="number" class="balance">
<!--html-->
就是我想让它留在选项和if语句中的方式。我想要这样做的原因是因为字段是动态添加的。所以如果你能在现有的代码中添加一个函数,让它在我改变选择选项时改变值,那就太好了。上面的代码是完美的,它只是需要我所要求的。
首先你的代码中有一些不一致的地方。
每次更改下拉菜单的选择时,您都在设置on input事件。在jquery中,这很糟糕,因为它不会覆盖之前的事件,而是向该元素添加另一个事件。想象一下改变下拉菜单100次。
首先,我所做的是在$(document).ready
函数中为每个包含'sex'的元素添加输入事件
$(document).ready(function(){
$('.sex').on('input', function() {
var option = $("#dropdown")[0].selectedIndex;
//your other code for balancing the inputs
});
});
现在,我将在您编写的changeValue()
函数中所做的只是设置输入元素的最小值和最大值,并平衡它们的除法,以便两者的总和(将来可能超过两个)不会超过当前情况的总和。
function changeValue(dropdown,source) {
if (source == 0){
var caseNo = dropdown.selectedIndex;
var minValue = 0, maxValue = 1;
if(caseNo === 2)
maxValue = 15;
else if(caseNo === 3)
maxValue = 25;
$(".sex").attr({"min": minValue, "max": maxValue});
$.each($(".sex"), function(){
//your other code for balancing the inputs
});
}
}
我们知道最小值总是0,因为在任何情况下,男性和女性的输入都可以为0。我们只关心最大值。所以我只是根据大小写找到所需的最大值,然后根据两者设置文本框的最小值和最大值。
现在这行代码$.each($(".sex"), function(){
//your other code for balancing the inputs
});
当下拉菜单的选择改变时,它将被用来平衡输入。
由于相同的代码将被反复使用,所以我创建了一个名为balanceValues()
的函数
这是它的定义
function balanceValues(caseNo, elementId){
var value = parseInt($("#" + elementId).val());
var otherInputs = $(".sex").not($("#" + elementId));
var remainderDiv;
var remainder, sum;
var total = 1;
if(caseNo === 2)
total = 15;
else if(caseNo === 3)
total = 25;
if (isNaN(value)) {
value = 0;
} else if (value > total) {
value = total;
} else if (value < 0) {
value = 0;
}
$("#" + elementId).val(value);
remainder = total - value;
remainderDiv = remainder / otherInputs.length;
sum = value;
$.each(otherInputs, function() {
sum += Number($(this).val());
});
if (sum > total) {
otherInputs.val(remainderDiv);
}
}
几乎所有的代码都是相同的是你的,但我使它可重用。您只需要传递caseNo和更改输入的元素id。对于选择更改事件,我们将为所有输入调用此函数。
现在$(document).ready
函数是这样的
$(document).ready(function(){
$('.sex').on('input', function() {
var option = $("#dropdown")[0].selectedIndex;
balanceValues(option, this.id);
});
});
在changeValue()
函数中,我前面加了注释的那行代码将是这样的。
$.each($(".sex"), function(){
balanceValues(dropdown.selectedIndex, $(this).attr("id"));
});
我已经测试了代码在我的结束和它的工作良好。
相关文章:
- 从选项页面更新chrome扩展清单权限
- 如何从Angular.JS中的子页面更新选项卡视图
- 更新选项卡开关/更改上的chrome扩展图标
- 在 ExtJS 中更新选项卡开关上的网格面板
- 在猫头鹰轮播 2 中初始化后更新选项
- 挖空.js从 AJAX 调用获取数据后更新选项文本
- jQuery 选择,以更新<选项>字段
- 所选选择框中更新选项的性能
- KnockoutJS:无法更新选项值
- 基于单选按钮选择的jQuery DatePicker更新选项
- 如何在ExtJs 5.0中通过ajax调用在更新选项卡后强制重新索引
- 选择2:选择新标记后更新选项
- 已选择jquery上的更新选项
- 占位符不会更新选项值
- 当最小化页面上出现新内容时,如何更新选项卡的标题?
- jQuery选择(chzn)更新选项
- 如何更新选项卡上的通知徽标
- 在Jquery插件wpaginate中使用ajax更新选项总页面
- 避免在更新选项调用中清理画布
- 引导输入提前更新选项