Jquery 更改selectbox值后获取html内容

Jquery 更改selectbox值后获取html内容,jquery,Jquery,我使用以下函数来捕获div内容 function getHtml(div) { div.find("input").each(function () { $(this).attr("value", $(this).val()); }); return div.html(); } 并捕获如下数据 var updateSearchContent = getHtml($('#someform')); 但是如果div中有任何select框,并且我更改了它的值,

我使用以下函数来捕获div内容

function getHtml(div) {
    div.find("input").each(function () {
        $(this).attr("value", $(this).val());
    });
    return div.html();
}
并捕获如下数据

var updateSearchContent = getHtml($('#someform'));
但是如果div中有任何select框,并且我更改了它的值,那么函数将只捕获带有默认值的初始状态


我怎样才能解决这个问题?如果我更改选择框的值,它应该将更改的值保存为默认值。

我认为您在循环中遗漏了select元素。如果我不正确,请告诉我

试试这个

function getHtml(div) {
    div.find("input, textarea, select").each(function () {
        $(this).val($(this).val());
    });
    return div.html();
}

如果在div中有一个select,则需要绑定一个更改事件,以便在它发生更改时获取值:

$('#someform').on('change','selecttags', function() {
    alert( $(this).find(":selected").val() );
});
请注意,select允许选择多个值,因此返回值可能是一个值数组

如果表单中包含复选框和单选按钮,则还需要考虑这些复选框和单选按钮,因为它们具有不同的值集

请注意另一个问题:

$('select').prop("type");
将根据“多个”属性返回“选择一个”或“选择多个”


有关输入类型检测的完整讨论,请参见此问题:

我已将getHtml函数更改为以下内容,以便它可以在更新的html内容中保存所选值

function getHtml(div) {
        div.find("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());
                }
            }
        });
        return div.html();
    }

你为什么这么做?不能使用jQuery.serialize()函数或类似的函数吗?使用HTML将导致重新提交所有内容,againi必须将此HTML内容保存到会话以供进一步使用。您可以在会话中仅保存数组中的值,然后在需要时将其分配给输入。存储HTML会用不必要的内容污染会话存储。另外,当您想要更改初始HTML时会发生什么情况?在会话到期之前,更改将不可见select/textarea HTML项上没有属性值这可以通过.HTML完成,但是如果我想保留我编写的表单的输入,则需要使用该函数。与将select放在那里没有关系。谢天谢地,我没有测试这个,但尝试了jquery克隆函数。也请检查此项: