【问题标题】:Unable to get input box to populate with onKeyup or onChange无法让输入框填充 onKeyup 或 onChange
【发布时间】:2013-05-26 21:22:35
【问题描述】:

所以我有一个表格,当您在数量和价格框中输入一个数字时,它会在分机框中将它们加起来。 当您继续向下添加更多数量和价格时,它会继续计算总计并按应有的方式填充材料总计,但它不会按应有的方式添加税并填充总计框。 如果您在材料总计框中手动输入金额,则税金和总计将自动填充并且总计正确。我尝试过使用 onChange、onKeyup 甚至 onInput,但似乎没有任何效果。

这是我的销售税脚本:

function tax(){
var material = document.getElementById( 'material' ).value;
var salestax = Math.round(((material / 100) * 8.1)*100)/100;
var total = (material*1) + (salestax * 1);

document.getElementById( 'material' ).value = material;
document.getElementById( 'salestax' ).value = salestax;
document.getElementById( 'total' ).value = total;
}

这里是与脚本相关的html:

<table>
<td style="width: 40px;">
<td style="width: 465px;" class="auto-style6">Material Total</td> 
<td><input type="text" name="material_total"style="width: 55px"id="material"onChange="tax()"></td>
</table>

<table>
<td style="width: 40px;">
<td style="width: 465px;" class="auto-style6">Sales Tax</td> 
<td><input type="text" name="sales_tax" style="width: 55px" id="salestax" onChange="tax()"></td>
</table>

<table>
<td style="width: 40px;">
<td style="width: 465px;" class="auto-style6">Shipping</td> 
<td><input type="text" name="ship_cost" style="width: 55px" id="shipping"></td>
</table>

<table>
<td style="width: 40px;">
<td style="width: 465px;" class="auto-style6">Total</td>
<td><input type="text" name="total_parts_cost" style="width: 55px"  id="total"></td>
</table>

更新到问题:所以在玩过之后我发现 onpropertychange 会使表单工作,但只在 IE 中(我使用的是 IE 10)而不是在火狐中。我包含了用于总计自动填充 Ext 框的 Qty 和 Price 框的代码,因为它有效并且我使用 onkeyup。我不明白为什么它不适用于税务部门。

enter code here    function multiply1() {
var extend1 = 1;
for (var i = 1; i <= 2; i++) {
    var id = "1_value" + i;
    extend1 = extend1 * document.getElementById(id).value;
}
document.getElementById("extend1").value = extend1;
summate();
}

function multiply2() {
var extend2 = 1;
for (var i = 1; i <= 2; i++) {
    var id = "2_value" + i;
    extend2 = extend2 * document.getElementById(id).value;
}
document.getElementById("extend2").value = extend2;
summate();
}

function multiply3() {
var extend3 = 1;
for (var i = 1; i <= 2; i++) {
    var id = "3_value" + i;
    extend3 = extend3 * document.getElementById(id).value ;
}
document.getElementById("extend3").value = extend3;
summate();
}

function multiply4() {
var extend4 = 1;
for (var i = 1; i <= 2; i++) {
    var id = "4_value" + i;
    extend4 = extend4 * document.getElementById(id).value;
}
document.getElementById("extend4").value = extend4;
summate();
}

function multiply5() {
var extend5 = 1;
for (var i = 1; i <= 2; i++) {
    var id = "5_value" + i;
    extend5 = extend5 * document.getElementById(id).value;
}
document.getElementById("extend5").value = extend5;
summate();
}

function summate() {
var material = 0;
for (var i = 1; i <= 5; i++) {
    var id = "extend" + i;
    material = material + document.getElementById(id).value * 1;
}
document.getElementById("material").value = material;
}

【问题讨论】:

    标签: javascript events onchange onkeyup


    【解决方案1】:

    我想我明白你在问什么:onchange 事件没有为材料框触发,因为它正在以编程方式进行更改,因此不会触发。

    您可以手动触发此功能。您似乎正在修改 summate() 函数中的材料框。要使材质框注册更改,请在 summate() 函数的最后添加以下行:

    document.getElementById("material").onchange();
    

    希望那是您想要的。如果您希望在修改框时更新它,我认为您可能还必须在某些数量或其他字段上添加此类内容。

    编辑:这只有在您为材料元素设置了 onchange 属性时才有效(我注意到您将其更改为 oninput)。

    【讨论】:

    • 感谢 Nile 的帮助,我在您回答时正在玩弄它,发现将 onchange 更改为 onpropertychange 可以使表单正常工作。
    • 真的吗?您的更新版本不适用于我的 Firefox 或 chrome。
    • 它只需要在 IE 中工作,因为它会在技术人员的 Toughbook 上使用。他们不会有其他浏览器选项可供使用,因为 Toughbook 仅用于服务工作。
    • 我会将您的建议添加到 JavaScript 文件中,看看它是否适用于其他浏览器!
    • 为了让我发布的 sn-p 工作,您需要在您的材料元素中再次使用 onchange="tax()" ,所以这可能不值得麻烦。编辑:并确保 sn-p 位于 summate() 函数的末尾,而不是 tax() 函数的末尾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多