我是这里的新成员,我正在寻找解决我的问题的方法,如下所示:
我有一个元素标记,在ajax / jQuery帖子后加载到DOM中,其定义如下:
function PostAndUpdate(_username) {
$.post("/SearchCompetitor/Index", { username: _username }, StartLoading())
.done(function (data) {
if (data !== "UsernameError") {
StopLoading();
var brands = $('<table />').append(data).find('#tableProducts').html();
$('#tableProducts').html(brands);
var header = $('<div />').append(data).find('.bs-glyphicons').html();
$('.bs-glyphicons').html(header);
$('#tableProducts thead, #header').fadeIn("slow");
$('#emptyText').hide();
}
else {
StopLoading();
ShowMessage("Nouser was found under: " + $('.txtSearch').val());
}
})
.fail(function (data) {
StopLoading();
ShowMessage("Something went wrong, please try again!");
});
}
元素如下所示:
<div class="count feedbackScoreClass" value="@ViewBag.FeedbackScore">@ViewBag.FeedbackScore</div>
现在我正试图在下一个按钮点击中获取其值,将其发布到服务器上:
$(document).on("click", ".btnSaveWatchlist", function () {
StopLoading();
if ($('#TextArea1').val() == "" || !$('#ratingSystem input').is(':checked')) {
ShowErrorMessage("All fields are required!");
console.log($('.feedbackScoreClass').val());
return;
} else {
$.post("/SearchCompetitor/SaveWatchList", { comment: $('#TextArea1').val(), rating: $('input[name=rating]:checked').val(), feedback: $('.feedbackScoreClass').val(), competitor: $('.txtSearch').val() })
.done(function (data) {
if (data == "Ok") {
var l = document.getElementById('cancelButton');
l.click();
} else if (data == "AllFieldsRequired") {
ShowErrorMessage("All fields are required!");
return;
}
});
}
});
我尝试在DOM中更新后获取元素值,如下所示:
$('.feedbackScoreClass').val()
但是这不起作用,我会得到一个空字符串......我怎么能解决它?
答案 0 :(得分:0)
我对JQuery也有点新意,但我做了一个快速的研究,希望有所帮助。
首先在jquery文档中,我看到了这个解释
.val()方法主要用于获取表单元素的值 例如input,select和textarea。当空的时候叫 集合,它返回undefined。
所以当我检查你的代码时,除了这个
<div class="count feedbackScoreClass" value="@ViewBag.FeedbackScore">@ViewBag.FeedbackScore</div>
您使用的所有元素.val()
方法都是一个输入字段(我根据类和ID名称做出了这个假设,如果我错了,请纠正我)
因为你的元素是<div>
,所以它可能是它返回一个带有.val()
的空字符串的原因。
当我搜索替代方法时,对于不是输入字段的元素,我发现了以下内容:
如果您使用.val()
获取属性值的值
<div class="count feedbackScoreClass" value="@ViewBag.FeedbackScore">
您可以尝试$('.feedbackScoreClass').attr('value')
尝试
或者对于html的值,您也可以使用.html()
方法(在代码中已经多次使用此方法)。
然而,重要的是要考虑以下有关.attr()和.html()的解释
在HTML文档中,.html()可用于获取任何内容 元件。如果选择器表达式匹配多个元素, 只有第一个匹配才会返回其HTML内容。
.attr()方法仅获取第一个元素的属性值 在匹配的集合中。要单独获取每个元素的值, 使用循环结构,如jQuery的.each()或.map()方法。
所以也许你也可以在你的元素中使用额外的id标签来使事情更容易