javascript有条件地禁用按钮
为什么我会收到警报,但在从select更新总计后,将负数更改为正数后,按钮无法启用。 以下是不起作用的部分:javascript有条件地禁用按钮,javascript,jquery,Javascript,Jquery,为什么我会收到警报,但在从select更新总计后,将负数更改为正数后,按钮无法启用。 以下是不起作用的部分: if ($('.grand_total').val() < 0) { $('#submit').prop('disabled', true); alert('negative number found'); } else if ($('.grand_total').val() > 0) { $('#submit').prop('disabled',
if ($('.grand_total').val() < 0) {
$('#submit').prop('disabled', true);
alert('negative number found');
} else if ($('.grand_total').val() > 0) {
$('#submit').prop('disabled', false);
alert('positive number found');
}
if($('.grand_total').val()<0){
$(“#提交”).prop('disabled',true);
警报(“发现负数”);
}else if($('.grand_total').val()>0){
$(“#提交”).prop('disabled',false);
警报(“找到正数”);
}
下面是完整的代码:
<script language="javascript">
$(".add_to_total").on('change', function() {
var total = 0;
var grand_total = 0;
$(".dynamic_row").each(function() {
var row = $(this);
var start_hour_am = parseFloat(row.find(".start_hour_am").val()) || 0;
var start_minute_am = parseFloat(row.find(".start_minute_am").val()) || 0;
var end_hour_am = parseFloat(row.find(".end_hour_am").val()) || 0;
var end_minute_am = parseFloat(row.find(".end_minute_am").val()) || 0;
var start_hour_pm = parseFloat(row.find(".start_hour_pm").val()) || 0;
var start_minute_pm = parseFloat(row.find(".start_minute_pm").val()) || 0;
var end_hour_pm = parseFloat(row.find(".end_hour_pm").val()) || 0;
var end_minute_pm = parseFloat(row.find(".end_minute_pm").val()) || 0;
total = ( (Number(end_hour_am) + (Number(end_minute_am))) - (Number(start_hour_am) + Number(start_minute_am)) + (Number(end_hour_pm) + Number(end_minute_pm)) - (Number(start_hour_pm) + Number(start_minute_pm)));
row.find(".total").val(total);
grand_total = Number(grand_total) + Number(total);
});
$("#grand_total").val(grand_total);
if ($('.grand_total').val() < 0) {
$('#submit').prop('disabled', true);
alert('negative number found');
} else if ($('.grand_total').val() > 0) {
$('#submit').prop('disabled', false);
alert('positive number found');
}
});
</script>
$(“.add_to_total”)。在('change',function()上{
var合计=0;
var grand_总计=0;
$(“.dynamic_row”)。每个(函数(){
var行=$(此);
var start_hour_am=parseFloat(row.find(“.start_hour_am”).val())| 0;
var start_minute_am=parseFloat(row.find(“.start_minute_am”).val())| 0;
var end_hour_am=parseFloat(row.find(“.end_hour_am”).val())| 0;
var end_minute_am=parseFloat(row.find(“.end_minute_am”).val())| 0;
var start_hour_pm=parseFloat(row.find(“.start_hour_pm”).val())| 0;
var start_minute_pm=parseFloat(row.find(“.start_minute_pm”).val())| 0;
var end_hour_pm=parseFloat(row.find(“.end_hour_pm”).val())| 0;
var end_minute_pm=parseFloat(row.find(“.end_minute_pm”).val())| 0;
总数=((数字(结束小时上午)+(数字(结束分钟上午))-(数字(开始小时上午)+数字(开始分钟上午))+(数字(结束小时下午)+数字(结束分钟下午))-(数字(开始小时下午)+数字(开始分钟下午));
行。查找(“.total”).val(总计);
总计=数量(总计)+数量(总计);
});
$(“总计”).val(总计);
如果($('.grand_total').val()<0){
$(“#提交”).prop('disabled',true);
警报(“发现负数”);
}else if($('.grand_total').val()>0){
$(“#提交”).prop('disabled',false);
警报(“找到正数”);
}
});
任何想法都将不胜感激
更新
以下是总计的html:
<input type="text" class="grand_total" name="grand_total" id="grand_total" data-role="none" value="0" size="3" readonly="true">
这是我试图禁用的按钮:
<button type="submit" data-theme="e" data-mini="true" data-inline="true" name="submit" id="submit" class="submit" data-icon="check" value="submit-value">Submit</button>
提交
根据Nick N的建议,禁用/启用按钮仍然存在同样的问题
<script language="javascript">
$(".add_to_total").on('change', function() {
var total = 0;
var grand_total = 0;
$(".dynamic_row").each(function() {
var row = $(this);
var start_hour_am = parseFloat(row.find(".start_hour_am").val()) || 0;
var start_minute_am = parseFloat(row.find(".start_minute_am").val()) || 0;
var end_hour_am = parseFloat(row.find(".end_hour_am").val()) || 0;
var end_minute_am = parseFloat(row.find(".end_minute_am").val()) || 0;
var start_hour_pm = parseFloat(row.find(".start_hour_pm").val()) || 0;
var start_minute_pm = parseFloat(row.find(".start_minute_pm").val()) || 0;
var end_hour_pm = parseFloat(row.find(".end_hour_pm").val()) || 0;
var end_minute_pm = parseFloat(row.find(".end_minute_pm").val()) || 0;
total = ( (Number(end_hour_am) + (Number(end_minute_am))) - (Number(start_hour_am) + Number(start_minute_am)) + (Number(end_hour_pm) + Number(end_minute_pm)) - (Number(start_hour_pm) + Number(start_minute_pm)));
row.find(".total").val(total);
grand_total = Number(grand_total) + Number(total);
});
$("#grand_total").val(grand_total);
//if (parseFloat($('.grand_total').val()) < 0) {
// $('#submit').prop('disabled', true);
// alert('negative number found');
//} else if (parseFloat($('.grand_total').val()) > 0) {
// $('#submit').prop('disabled', false);
// alert('positive number found');
//}
var total = parseFloat($('#grand_total').val());
if(total < 0){
$('#submit').prop('disabled', true);
alert('negative number found...');
}
else {
$('#submit').prop('disabled', false);
alert('positive number found...');
}
});
</script>
$(“.add_to_total”)。在('change',function()上{
var合计=0;
var grand_总计=0;
$(“.dynamic_row”)。每个(函数(){
var行=$(此);
var start_hour_am=parseFloat(row.find(“.start_hour_am”).val())| 0;
var start_minute_am=parseFloat(row.find(“.start_minute_am”).val())| 0;
var end_hour_am=parseFloat(row.find(“.end_hour_am”).val())| 0;
var end_minute_am=parseFloat(row.find(“.end_minute_am”).val())| 0;
var start_hour_pm=parseFloat(row.find(“.start_hour_pm”).val())| 0;
var start_minute_pm=parseFloat(row.find(“.start_minute_pm”).val())| 0;
var end_hour_pm=parseFloat(row.find(“.end_hour_pm”).val())| 0;
var end_minute_pm=parseFloat(row.find(“.end_minute_pm”).val())| 0;
总数=((数字(结束小时上午)+(数字(结束分钟上午))-(数字(开始小时上午)+数字(开始分钟上午))+(数字(结束小时下午)+数字(结束分钟下午))-(数字(开始小时下午)+数字(开始分钟下午));
行。查找(“.total”).val(总计);
总计=数量(总计)+数量(总计);
});
$(“总计”).val(总计);
//if(parseFloat($('.grand_total').val())<0){
//$(“#提交”).prop('disabled',true);
//警报(“发现负数”);
//}else if(parseFloat($('.grand_total').val())>0){
//$(“#提交”).prop('disabled',false);
//警报(“找到正数”);
//}
var total=parseFloat($('grand#u total').val();
如果(总数<0){
$(“#提交”).prop('disabled',true);
警报('找到负数…');
}
否则{
$(“#提交”).prop('disabled',false);
警报('找到正数…');
}
});
更新
Ok看起来问题是因为按钮是jquery mobile生成的按钮,当发现负值时,它不会更新按钮的状态,如果我刷新整个表单,按钮状态就会改变。我通过将data角色设置为none来测试这一点,这样submit按钮就变成了一个标准的表单按钮,并且disable/enable功能可以工作。
有什么办法可以解决这个问题吗?试试这个:
var total = parseInt($('.grand_total').val());
if(total < 0){}
else {}
var-total=parseInt($('.grand_-total').val());
如果(总数<0){}
else{}
您正在传递$('.grand_total').val()
代替$(“#总计”).val()
这应该可以:
var total = parseFloat($('.grand_total').val());
if(total < 0){
$('#submit').attr("disabled", "disabled");
alert('negative number found');
}
else {
$('#submit').removeAttr("disabled");
alert('positive number found');
}
请注意:我将“#”改为“.”。根据您的HTML,您还可以更改此行:
$(".grand_total").val(grand_total);
致:
像这样使用pasreInt($('.grand_total').val())并检查您的选择器是否正确?#提交是否确实选择了要禁用的按钮?在chrome控制台中尝试使用
attr
insead ofprop
我已经编辑了我的答案,请看一看Hi Nick N,我输入了你的代码并检查了html中的选择器,仍然不起作用,我收到了警报,但按钮上什么都没有。如果总计变为负值,则会发出警报,但不会禁用按钮。有什么想法吗?我已经编辑了我的答案,应该可以了。这与disabled应该具有值“disabled”而不是true有关。如果启用,只需删除整个属性。它将仅在表单刷新后更新状态。因此,您的原始代码确实可以工作,但按钮在表单刷新之前不会更新。只需刷新按钮,而不是整个表单,然后重新编辑Hanks Nick N yes在此处搜索时也发现了这一点。我会奖励你正确的答案,非常感谢。
$(".grand_total").val(grand_total);
$("#grand_total").val(grand_total);