javascript - 基于HTML5数据元素的jQuery刷新div

标签 javascript jquery ajax html

我的代码如下:

$('*[data-pickup]').change(function(){
    var value = $(this).val();
    console.log(value);
    $.ajax({
       type    : "POST",
       cache   : false,
       url     : "a.php?pickup",
       data    : {'X': value},
      success: function(data) {
        $("*[data-pick='" + $(this).attr("data-pickup") + "']").html("HELLO");
        }
      });

    $("*[data-pick='" + $(this).attr("data-pickup") + "']").html("HELLO 2");
    $("*[data-pick='" + $(this).attr("data-pickup") + "']").show();
})

通过 Firebug 查看时,AJAX 调用显示了一个响应,该响应没有在屏幕上刷新,因此我将其更改为简单的“Hello”响应,但这仍然不起作用。

如果我注释掉 .html("HELLO 2") 行,它会显示曾经隐藏的 div,其中包含 data-pick=1 的 HTML5 数据元素或data-pick=2等(取决于attr("data-pickup")是什么),其中自动填充“Test”,因此显示“Test” ”。

如果我取消注释 .html("HELLO 2") 行,则显示的 div 会显示“HELLO 2”。但是,对于注释掉的 .html("HELLO 2") 行,它应该通过 AJAX 调用从“Test”更新为“Hello”,但事实并非如此。如果我将 data* 更改为简单的 HTML id 元素并将所有代码更新为 #"+ $(this).attr("data-pickup") + ",它的工作原理与数据属性(AJAX 调用不会更新任何内容)。

当我创建一个名为“el”的变量并使其等于*[data-pick='"+ $(this).attr("data-pickup") + "'],然后将其打印到控制台,它显示为:“[data-pick='1']”或“[data-pick='2']”等。然后如果我更新从 $("*[data-pick='"+ $(this).attr("data-pickup") + "']").whatever$( 的所有代码el).whatever(认为某处可能存在错误),它仍然像以前一样工作。

那么,我到底做错了什么?为什么 div 不会通过 AJAX 调用刷新,但在 AJAX 调用后会刷新?

最佳答案

问题在于ajax函数的成功处理程序中的“this”是ajax函数本身,而不是触发事件处理程序的元素。您需要做的是存储元素 var el = $(this) 的值,然后每当您想要利用闭包访问该元素时引用该值。

$('*[data-pickup]').change(function(){
        var value = $(this).val();
        var el = $(this);
        console.log(value);
        $.ajax({
           type    : "POST",
           cache   : false,
           url     : "a.php?pickup",
           data    : {'X': value},
          success: function(data) {
            $("*[data-pick='" + el.attr("data-pickup") + "']").html("HELLO");
            }
          });

        $("*[data-pick='" + el.attr("data-pickup") + "']").html("HELLO 2");
        $("*[data-pick='" + el.attr("data-pickup") + "']").show();
    })

关于javascript - 基于HTML5数据元素的jQuery刷新div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29762709/

相关文章:

javascript - 如何在单击该 div 按钮时获取字段的输入值?

javascript - 如何缩放博客幻灯片中的图像以适合滑动条?

javascript - 在 Laravel 5.2 中使用 jquery 和 ajax 出现 500 内部服务器错误

javascript - 如何在替换图像时使用 AJAX 刷新 DIV?

javascript - 图表;无法读取未定义的属性 '0'

javascript - AngularJS工厂不保留值(value)

javascript - React 组件作为背景图片

javascript - 如何测试前端 JavaScript 库并与 Travis 集成?

javascript - 有条件地附加已解析的 JSON 中与值匹配的元素

jquery - Grails 干扰 jquery-tmpl 语法