Jquery 更改selectbox值后获取html内容
我使用以下函数来捕获div内容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框,并且我更改了它的值,
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克隆函数。也请检查此项: