Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 表单上的OnkeyUp事件只处理onw表单的元素,即使我在不同的表单中使用它_Javascript_Jquery_Jquery Plugins_Dom Events - Fatal编程技术网

Javascript 表单上的OnkeyUp事件只处理onw表单的元素,即使我在不同的表单中使用它

Javascript 表单上的OnkeyUp事件只处理onw表单的元素,即使我在不同的表单中使用它,javascript,jquery,jquery-plugins,dom-events,Javascript,Jquery,Jquery Plugins,Dom Events,我有以下两种表格: <li> <form name="1" id="gg" method="" > <div style="item-list"> <div class="item-attribute">Oil</div> <div class="item-attribute" id="unit" value="40">40</div> <div class="it

我有以下两种表格:

<li>

    <form name="1" id="gg" method="" >
    <div style="item-list">
    <div class="item-attribute">Oil</div>
    <div class="item-attribute" id="unit" value="40">40</div>
    <div class="item-attribute"><input type="text" style="width:30px;" id="quantity" onkeyup="total()"/></div>
    <div id="total" class="item-attribute"></div>
    <div style="float:left;margin-left:50px;"><input type="submit" value="Add To Cart"/></div>
    </div>
    </form>
</li>

<li>
    <form name="2" id="dg" method="" >
    <div style="item-list">
    <div class="item-attribute">salt</div>
    <div class="item-attribute" id="unit" value="13">13</div>
    <div class="item-attribute"><input type="text" style="width:30px;" id="quantity" onkeyup="total()"/></div>
    <div id="total" class="item-attribute"></div>
    <div style="float:left;margin-left:50px;"><input type="submit" value="Add To Cart"/></div>
    </div>
    </form>
</li>
我想要表单中的元素,在其中输入数字并执行计算,然后显示在表单上。 但在第二种形式中,当函数在onkeyup evet上被调用时,它采用的是第一种形式的元素,而不是它自己的元素

请帮我解决这个问题。

整个文档中的id必须是唯一的,而不是表单。
document.getElementById函数将返回整个文档上的第一个事件,尽管行为在技术上尚未定义,但标准浏览器将这样做。

如果使用JQuery,请将表单ID作为参数传递给函数

    <input type="text" style="width:30px;" id="quantity" onkeyup="total('dg')"/>

更改元素事件侦听器以获取事件参数:

<input type="text" style="width:30px;" id="quantity" onkeyup="total(event)"/>

您不应该对一个文档中的元素使用相同的id。

我没有使用Jquery。只有简单的Java脚本我编辑了答案,您可以检查这是否适用。不……当我在alert中打印id时,它会给出[ObjectHTMLFormElement]…当我在alert中打印表单时,它给出空值..但是quant没有像我们上面所做的那样被打印出来我不理解这个问题。您可以为此创建一个JSFIDLE吗?我会改正的。有什么方法可以让我得到当前形式的元素吗@UweBI已经进行了更新,以使其适用于您的示例,但这只是给您一些指导,您应该通过进一步调查来了解自己。OK。。谢谢你的帮助!!
function total(id)
{
    var form = document.getElementById(id)
    var quant=form.elements.item('quantity').value;
    alert(quant);
    var unit=form.elements.item('unit').value;

    var cost=quant*unit;
    form.elements.item('total').innerText = cost;
 }
<input type="text" style="width:30px;" id="quantity" onkeyup="total(event)"/>
function total(event) {
    var unit = event.target.parentNode.previousElementSibling.innerHTML;
    var qty = event.target.value;
    event.target.nextElementSibling.innerHTML = unit*qty;
}