javascript - 如何在不知道按钮 id/class 或表单 id/class 的情况下提交表单?

标签 javascript jquery html node.js ejs

嗨,我在一个页面中有多个表单,每个表单都有从后端获取的不同的productId,每个表单有 2 个按钮,一个用于添加产品,一个用于删除产品。如果他们单击“+”按钮,则必须转到 javascript 中的“if”条件,如果他们单击“-”按钮,则必须转到 javascript 中的“else”条件

这是我的 html

<form>
    <input type="hidden" class="form-control" name="productCatalogId" value="<%= data.productDetails[i].productCatalogId %>">
    <input type="hidden" class="form-control" name="productquantity" value="<%= data.productDetails[i].productQuantity %>">
    <button type="button" value="addition" class="btn btn-primary btn-sm">+</button>
    <h4>
        <%= data.productDetails[i].productQuantity %>
    </h4>
    <button type="button" value="substraction" class="btn btn-primary btn-sm">- </button>
</form>

像这样我有很多表格!!

和我的 JavaScript

$(':button').click(function(e) {
                e.preventDefault();
                var updateOrder = $(this.form).serializeArray();
                dataObj = {};
                $(updateOrder).each(function(i, field) {
                    dataObj[field.name] = field.value;
                });
                console.log(dataObj['productquantity']);
                var orderId = $("#orderid").val();
                updateOrder.push({
                    name: "orderId",
                    value: orderId,
                });
                // console.log($(':button').val());
                if ($(':button').val() == 'addition') {
                    var quantity = parseInt($("input[name=productquantity]").val()) + 1;
                } else {
                    var quantity = parseInt($("input[name=productquantity]").val()) - 1;
                }
                updateOrder.push({
                    name: "quantity",
                    value: quantity,
                });
                // console.log(updateOrder);
                $.ajax({
                    url: '/order/updateorderitems',
                    type: 'POST',
                    data: updateOrder,
                    success: function(response) {
                        if (response.success) {
                            // console.log(response);
                        }
                    }
                });
                // console.log(productData);
            });

每当我点击任何按钮时,它只会出现“如果条件”! 谁能告诉我我做错了什么?

最佳答案

问题是因为您在 if 语句中使用了 :button 选择器。当与 val() 结合使用时,它只会从匹配集中的第一个 :button 元素读取。

要解决此问题,请在事件处理程序中使用 this 关键字来仅引用所单击的按钮。试试这个:

if ($(this).val() == 'addition') {
    var quantity = parseInt($("input[name=productquantity]").val(), 10) + 1;
} else {
    var quantity = parseInt($("input[name=productquantity]").val(), 10) - 1;
}

另请注意,这可以变得更加简洁,如下所示:

var quantity = parseInt($("input[name=productquantity]").val(), 10) 
$(this).val() == 'addition' ? quantity++ : quantity--;

关于javascript - 如何在不知道按钮 id/class 或表单 id/class 的情况下提交表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43390845/

相关文章:

JavaScript,无法使其工作

javascript - ReactJs 不存在授权 header

javascript - 在jquery中解析json

javascript - 在小屏幕上使用 jQuery 交换列的内容

javascript - 隐藏与 css vs JS 创建元素 vs ajax

javascript - 调整屏幕大小或更改屏幕方向后显示和隐藏弹出菜单的意外行为

javascript - 列出未使用 .val 函数显示的字段内容

javascript - 如何使用 jQuery getJSON() 访问从外部源接收的 JSON 元素?

javascript - js slider 在本地主机上不起作用

javascript - 基于行中文本匹配的 JQuery 过滤器