javascript - 一个字段改变后传递多个输入字段的JS函数值

标签 javascript jquery html json

我有一个带有大量选择和输入字段的 HTML 表单,用户使用它可以为每个类别选择他的订单项目(同一类别的项目具有相同的类)。每个项目还具有其他属性的字段,例如数量、颜色等
这是一个示例表单:

<form>
    <!--Category: Cats-->
    <label>Cat:</label>
    <select id="cat" class="cats">
        <option>nice</option>
        <option>ugly</option></select>
    <label>Quantity:</label>
    <input type="text" id="cat_qty" class="cats" />
    <br />
    <!--Category: Dogs-->
    <label>Dog:</label>
    <select id="dog" class="dogs">
        <option>nice</option>
        <option>ugly</option></select>
    <label>Quantity:</label>
    <input type="text" id="dog_qty" class="dogs" />
    <br />
</form>

真正的形式有更多的类别。另外,由于演示的必要性,有些属于同一类别的字段我无法在同一父标记内分组在一起,这意味着它们位于 HTML 页面中完全不同的位置。

假设用户刚刚对表单中的一个字段进行了更改。我正在寻找最优雅的方法来在每次发生更改时触发 JS 函数,并将与已更改字段具有相同类的所有字段的值传递给它,以便我可以创建一个 JSON 字符串,我将使用 Jquery 的 .AJAX 调用发送该字符串,以便更新数据库中的记录。

例如,如果用户选择“cat”-“ugly”,则会调用一个可以创建变量的 JS 函数:

fields = {  "cat":"ugly",
            "cat_qty" : "6"}

然后

$.ajax({type: "POST",
    url: "ajax/update.php",
    data: { Myfields: fields },
    dataType: "json",
    success: function() {}
       });

你能建议一种优雅的方式吗?我不确定是否使用 OnChange 调用、Jquery 'Change' 函数(无论哪种方式,我都没有找到如何使用它们..)或任何其他方式:)

非常感谢!

最佳答案

首先,您必须为所有输入字段提供名称(以及表单 ID):

<form id='pickAnimal'>
    <!--Category: Cats-->
    <label>Cat:</label>
    <select id="cat" class="cats" name='cat'>
        <option>nice</option>
        <option>ugly</option></select>
    <label>Quantity:</label>
    <input type="text" id="cat_qty" class="cats" name='cat_qty' />
    <br />
    <!--Category: Dogs-->
    <label>Dog:</label>
    <select id="dog" class="dogs" name='dog'>
        <option>nice</option>
        <option>ugly</option></select>
    <label>Quantity:</label>
    <input type="text" id="dog_qty" class="dogs" name='dog_qty'/>
    <br />
</form>

然后是序列化选择的js:

$('input, select', $('#pickAnimal')).change(function(){

    var theClass = $(this).attr('class');
    var theForm = $('#pickAnimal');

    var dataFields = $('.'+theClass, theForm).serialize();
    //gets all data from fields in the form that have the same class

    $.ajax({
       type: "POST",
       url: "ajax/update.php",
       data: dataFields,
       dataType: "json",
       success: function() {}
    });
})

关于javascript - 一个字段改变后传递多个输入字段的JS函数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652655/

相关文章:

javascript - 文本内容溢出到较低窗口高度的新动态列

javascript - 如何仅使用 css 删除 django 表单中的默认值 '0'

javascript - 在日期选择器中设置默认日期仅包含星期二和星期三?

jquery - jQuery 被认为已经过时了吗?

javascript - MutationObserver 仅删除节点

javascript - 如何过滤出子树然后在 jQuery 中进行搜索?

html - 使用 Sprite 的移动 html5 视频

javascript - 像 Jquery 一样在 python/Django 中进行 DOM 操作

javascript - 将数据数组转换为字符串

javascript - 在 Javascript 中处理分页 API 的最佳方法是什么?