9

是否可以通过 .html() 函数获取具有更新值属性的表单的 html?

(简化的)HTML:

<form>
    <input type="radio" name="some_radio" value="1" checked="checked">
    <input type="radio" name="some_radio" value="2"><br><br>
    <input type="text" name="some_input" value="Default Value">
</form><br>
<a href="#">Click me</a>

jQuery:

$(document).ready(function() 
{
    $('a').on('click', function() {
        alert($('form').html());
    });
});

这是我想要做的一个例子:http: //jsfiddle.net/brLgC/2/

更改输入值并按“单击我”后,它仍会返回具有默认值的 HTML。

如何通过 jQuery 简单地获取更新的 HTML?

4

4 回答 4

9

如果你真的必须有 HTML,你需要手动更新“值”属性:http: //jsfiddle.net/brLgC/4/

$(document).ready(function() 
{
    $('a').on('click', function() {
        $("input,select,textarea").each(function() {
           if($(this).is("[type='checkbox']") || $(this).is("[type='checkbox']")) {
             $(this).attr("checked", $(this).attr("checked"));
           }
           else {
              $(this).attr("value", $(this).val()); 
           }
        });
        alert($('form').html());
    });
});
于 2013-05-29T15:49:24.960 回答
5

RGraham 的回答对我不起作用,所以我将其修改为:

$("input, select, textarea").each(function () {
    var $this = $(this);

    if ($this.is("[type='radio']") || $this.is("[type='checkbox']")) {
        if ($this.prop("checked")) {
            $this.attr("checked", "checked");
        }
    } else {
        if ($this.is("select")) {
            $this.find(":selected").attr("selected", "selected");
        } else {
            $this.attr("value", $this.val());
        }
    }
});
于 2014-11-03T04:23:40.277 回答
2

拉克兰的作品“几乎”完美。问题是当表单被保存然后恢复然后再次保存时,收音机和复选框不会取消选中,而是继续复合。下面简单修复。

$("input, select, textarea").each(function () {
    var $this = $(this);

    if ($this.is("[type='radio']") || $this.is("[type='checkbox']")) {
        if ($this.prop("checked")) {
            $this.attr("checked", "checked");
        } else {
            $this.removeAttr("checked");
        }
    } else {
        if ($this.is("select")) {
            $this.find(":selected").attr("selected", "selected");
        } else {
            $this.attr("value", $this.val());
        }
    }
});
于 2015-09-11T20:20:46.237 回答
0

与 textarea 一起工作的版本如下

$("input, select, textarea").each(function () {
    var $this = $(this);

    if ($this.is("[type='radio']") || $this.is("[type='checkbox']")) {
        if ($this.prop("checked")) {
            $this.attr("checked", "checked");
        } else {
            $this.removeAttr("checked");
        }
    } else {
        if ($this.is("select")) {
            $this.find(":selected").attr("selected", "selected");
        } else if ($this.is("textarea")) {
                $this.html($this.val());
        } else {
            $this.attr("value", $this.val());
        }
    }
});
于 2021-12-01T13:57:53.703 回答