javascript有条件地禁用按钮

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',

为什么我会收到警报,但在从select更新总计后,将负数更改为正数后,按钮无法启用。 以下是不起作用的部分:

    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 of
prop
我已经编辑了我的答案,请看一看Hi Nick N,我输入了你的代码并检查了html中的选择器,仍然不起作用,我收到了警报,但按钮上什么都没有。如果总计变为负值,则会发出警报,但不会禁用按钮。有什么想法吗?我已经编辑了我的答案,应该可以了。这与disabled应该具有值“disabled”而不是true有关。如果启用,只需删除整个属性。它将仅在表单刷新后更新状态。因此,您的原始代码确实可以工作,但按钮在表单刷新之前不会更新。只需刷新按钮,而不是整个表单,然后重新编辑Hanks Nick N yes在此处搜索时也发现了这一点。我会奖励你正确的答案,非常感谢。
 $(".grand_total").val(grand_total);
$("#grand_total").val(grand_total);