在Ajax / jQuery发布后从DOM中获取值

时间:2016-12-22 19:44:23

标签: javascript jquery asp.net ajax dom

我是这里的新成员,我正在寻找解决我的问题的方法,如下所示:

我有一个元素标记,在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()

但是这不起作用,我会得到一个空字符串......我怎么能解决它?

1 个答案:

答案 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标签来使事情更容易