2016-04-26 85 views
0

在js GetTotal()函数中,我有一个确认框,后跟一个IF语句,它或者(1)计算新的总数(如果用户选择'ok');或(2)将变量'input1'和'input2'重新加载到文本输入框(如果用户选择'取消')。当'input1'和'input2'重新加载时,即使用户之前已经更改了这些变量,它们也总是重置为'input1'(5555)和'input2'(666)的原始全局值。本地全局变量问题 - javascript

我希望为'input1'和'input2'重新加载最近输入的变量(这与所显示的总数一致),而不是总是恢复为'input1'的原始全局值5555)和'输入2'(666)。我认为这与本地和全球有关,但我无法弄清楚。感谢任何建议。麦克风。

<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.35.1/js/bootstrap-dialog.min.js"></script> 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> 
    </head> 

<script> 

var input1 = 5555; 
var input2 = 666; 

$(document).ready(function() { 
    document.getElementById("input1").value = input1; 
    document.getElementById("input2").value = input2; 
    GetFirstTotal(); 
}); 




function GetFirstTotal() { 
    var total = 0; 
    $('input[type=text]').each(function(index, value) { 
     total += parseInt($(value).val() || 0); 
    }); 

    $("#chkTotal").html(total); 
} 

function GetTotal() { 
total = 0 
    BootstrapDialog.confirm('Are you sure you want to do this?', function(result){ 
    if(result) { 
     $('input[type=text]').each(function(index, value) { 
      total += parseInt($(value).val() || 0); 
     }); 
     $("#chkTotal").html(total); 
    }else{document.getElementById("input1").value = input1; 
    document.getElementById("input2").value = input2;} 
}); 
} 

</script> 

TOTAL: 
<div id="chkTotal"></div> 
<br> 
<input type="text" name="input1" id="input1"/> 
<input type="button" value="Change X" onclick="GetTotal(this)"/> 
<br> 
<br> 
<input type="text" name="input2" id="input2"/> 
<input type="button" value="Change Y" onclick="GetTotal(this)"/> 
+0

尚不完全清楚你的意思通过*“当'input1'和'input2'重新加载”*。你的意思是当页面刷新时?因为这是正常的,因为它也重新加载脚本,并且不知道在刷新页面之前发生了什么...... –

+0

如果最终用户在确认框中选择“取消”,ELSE语句会重新填充具有变量的表单输入'input1'和'input2'。在这种情况下,出现的input1和input2的值始终是在代码的JavaScript段开始处声明的原始值(即'input1'= 5555和'input2'= 666)。当表单重新填充时,我想使用'input1'和'input2'的最新值替代原始值 – MikeMcClatchie

回答

0

我认为,所有你需要做的是设置input1input2到其对应的文本框的值GetTotal

function GetTotal() { 
    total = 0 
    BootstrapDialog.confirm('Are you sure you want to do this?', function(result){ 
    if(result) { 
    input1 = parseInt($('#input1').val() || 0, 10); 
    input2 = parseInt($('#input2').val() || 0, 10); 
    // note that since you only have two fields, it's just as easy to write 
    total = input1 + input2; 
    //$('input[type=text]').each(function(index, value) { 
    // total += parseInt($(value).val() || 0); 
    //}); 
    $("#chkTotal").html(total); 
    }else{ 
    document.getElementById("input1").value = input1; 
    document.getElementById("input2").value = input2; 
    } 
}); 
+0

请注意,我使用'parseInt(value,radix)',使用10作为基数。这不是必须的,但是如果用户输入“010”,由于“0”表示八进制,他们在某些早期版本的JavaScript中不会得到10。 –

+0

欢呼!这是一种享受 – MikeMcClatchie

0

您需要在最终用户输入值时更新变量。东西这样做的效果可能工作:

$('#input1').on('change blur', function() { 
    input1 = Number(this.value); 
});