2010-09-29 110 views
1

我想添加一些JavaScript來執行以下操作。使用Javascript提交字段更改值

我會有3個這樣的領域。

<input type="text" name="a" /> 
<input type="text" name="b" /> 
<input type="hidden" name="c" /> 

說如果我在第一個字段中輸入了100,第二個字段中輸入了19。

它會將100除以19並舍入爲無小數位,然後將第三個隱藏字段的值替換爲答案,所以在這種情況下它將是(100/19)5.26 ...舍入多達6

但是我不知道如何實際執行此操作。

+0

如果數字是一個固定的n,那麼應該舍入一個數字嗎? – fredrik 2010-09-29 15:07:24

回答

1

表單元素後:

<script type="text/javascript"> 
    (function() { 
     var a= document.getElementsByName('a')[0]; 
     var b= document.getElementsByName('b')[0]; 
     var c= document.getElementsByName('c')[0]; 

     a.onchange=b.onchange=a.onkeyup=b.onkeyup= function() { 
      c.value= Math.ceil(a.value/b.value); 
     }; 
    })(); 
</script> 

這對重新計算每按一次鍵,刪除keyup綁定,如果你不希望出現這種情況。

爲每個輸入添加一個獨特的id並使用document.getElementById以避免與name有任何不確定性。如果此表格永遠不會提交,您可以完全省略name

Math.ceil()將返回NaN如果任一值不能被讀作一個數字,或Infinity如果除以零。你可能希望檢查這些條件並寫出不同的值。

+0

很棒!謝謝 – James 2010-10-01 08:03:48

2

說你的表單看起來像這樣;

<form id="myForm" method="POST"> 
    <input type="text" name="a" /> 
    <input type="text" name="b" /> 
    <input type="hidden" name="c" /> 
</form> 

您可以像這樣訪問表單;

function doAction(action) 
{ 
    var frm = document.forms.myForm; 
    frm.c.value = frm.a.value/frm.b.value; 
} 

您可以通過添加可單擊的按鈕或設置表單的提交操作來觸發操作。

編輯:不圓了,不知道該怎麼做:(

2

一個簡單化向下的方式,即假設你的表單document.forms [0]:

<input type="text" name="a" onchange="myFunction" /> 
<input type="text" name="b" onchange="myFunction" /> 
<input type="hidden" name="c" /> 

function myFunction() { 
    var inpA = document.forms[0].a; 
    var inpB = document.forms[0].b; 
    var aVal = parseFloat(inpA.value); 
    var bVal = parseFloat(inpB.value); 
    if (!isNaN(aVal) && !isNaN(bVal) && bVal !== 0) { 
    document.forms[0].c.value = Math.ceil(aVal/ bVal); 
    } 
} 

編輯:Math.round => Math.ceil

+0

應該是'Math.ceil'而不是'Math.round' – Jamiec 2010-09-29 15:13:37

+0

@Jamiec:可以。我不確定他想要什麼,所以我用Math.round。然而,原則是一樣的。 – Robusto 2010-09-29 15:41:43

+0

也許OP編輯了這個問題,但是當我讀到它時,它會說「它會將100除以19並將它舍入到無數小數位,」 – Jamiec 2010-09-29 15:46:53

0

可以通過從元素的eventlistner結合做到這一點,您可以創建你自己的(Javascript native event handlers),或使用你的FAVORIT JavaScript框架我的例子是使用jQuery jQuery bind method。javascript框架。

/* first set and id to your input hidden and form element so you can reach it in fast way */ 
<form id="myForm"><input type="hidden" id="total" name="c" /></form> 
/* Javascript code using jquery */ 

$('#form').bind('submit', function() { 
    $('#total').val(function() { 
     var num = parseFloat($('#form input[name=a]').val())/parseFloat($('#form input[name=b]').val()); 
     return Math.floor(num) === num ? num : Math.floor(num) + 1; 
    }); 
}); 
+2

Math.ceil而不是過時的+1邏輯 – Jamiec 2010-09-29 15:13:18

2

一個很好的簡單方法是將表單傳遞給函數,並允許該函數進行計算。

的形式應該是這樣的:

<form> 
<input type="text" name="a" /> 
<input type="text" name="b" /> 
<input type="hidden" name="c" /> 
<input type="button" value="Click" onClick="doCalculate(this.form)" /> 
</form> 

和JavaScript:

function doCalculate(theForm){ 
    var aVal = parseFloat(theForm.a.value); 
    var bVal = parseFloat(theForm.b.value); 
    var cVal = 0; 
    if(!isNaN(aVal) && !isNaN(bVal)){ 
     cVal = Math.ceil(aVal/bVal); 
    } 
    theForm.c.value = cVal; 
} 

工作示例這裏 - >http://jsfiddle.net/azajs/

編輯:這也可以當表單完成通過在表格中提交類似的電話提交:

<form onsubmit="doCalculate(this);" > 
... 
</form>