jquery - Ajax post serialize() 不包含按钮名称和值

标签 jquery

我的 $.ajax() 没有序列化按钮名称和值。

我有一个非常简单的表格。它有一个按钮和一个文本框。

<form action="/MyController/MyAction" data-ajax-method="post" 
  data-ajax-mode="replace" data-ajax-target="#mypartial" id="myform" 
  method="post">
        <button type="submit" class="positive" name="button" value="click1">
            <img src="/Id/Images/Icons/16/enabled/tick.png" title="click1">
            Click
        </button>
        <input id="txtBlah" name="txtBlah" type="text" value="hello">
    </div>
</form>

当我打电话$(this).serialize()时,文本框包含在字符串中,但不包含按钮。

Debug.Log($(this).attr('id')); //== 'myform'
Debug.Log("data: " + $(this).serialize()); //== data: txtBlah=hello

我在研究过程中注意到,对于其他问题,主要原因是按钮上缺少名称元素。我有一个名称元素。

我也尝试过制作一个非常简单的 <input type="submit" name="mysubmit" />这并没有改变任何东西。

我使用的解决方案

var buttonSubmit = (function (e)
{
    e.preventDefault();
    var form = $(this).closest('form');
    form.attr('data-button-name', $(this).attr('value'));
    form.closest('form').submit();
});

最佳答案

jQuery 的 serialize() 对于不编码按钮或提交输入非常明确,因为它们不被认为是“成功的控件”。这是因为serialize()方法无法知道单击了哪个按钮(如果有!)。

我设法通过捕获按钮单击、序列化表单,然后将所单击按钮的编码名称和值附加到结果中来解决该问题。

$("button.positive").click(function (evt) {
    evt.preventDefault();

    var button = $(evt.target);                 
    var result = button.parents('form').serialize() 
        + '&' 
        + encodeURI(button.attr('name'))
        + '='
        + encodeURI(button.attr('value'))
    ;

    console.log(result);
});

关于jquery - Ajax post serialize() 不包含按钮名称和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866459/

相关文章:

php - 移动新 html 页面的渲染元素

javascript - 我想要在 li.. 内升序第一个 div 文本?

jquery - 实时点击绑定(bind),内部有 .click 事件。防止递归

javascript - 如何从特定PHP结构中的 slider 获取值

javascript - jQuery Transit 动画重叠

javascript - js中的多个输入...?

javascript - 为什么我的模态框不会在窗口的正中央打开?

javascript - 将下拉列表值从 View 传递到 Controller

javascript - JS - 如何在使用 setInterval() 后清除间隔

jquery - 将鼠标悬停在 glyphicon glyphicon-info-sign 上时显示数据内容