javascript - 设置数据内容并显示弹出窗口

标签 javascript jquery twitter-bootstrap

我正在尝试使用 jquery 的 ajax 从资源中获取数据,然后我尝试使用此数据来填充 Bootstrap 弹出窗口,如下所示:

$('.myclass').popover({"trigger": "manual", "html":"true"});
$('.myclass').click(get_data_for_popover_and_display);

检索数据的函数是:

get_data_for_popover_and_display = function() {
    var _data = $(this).attr('alt');
    $.ajax({
         type: 'GET',
         url: '/myresource',
         data: _data,
         dataType: 'html',
         success: function(data) {
             $(this).attr('data-content', data);
             $(this).popover('show');
         }
    });
}

发生的事情是当我点击时弹出窗口没有显示,但是如果我稍后将鼠标悬停在元素上它会显示弹出窗口,但没有内容(data-content 属性)。如果我将 alert() 放入 success 回调中,它将显示返回的数据。

知道为什么会这样吗?谢谢!

最佳答案

在您的成功回调中,this 不再绑定(bind)到与 get_data_for_popover_and_display() 其余部分相同的值。

别担心! this 关键字是毛茸茸的;误解其值是 JavaScript 中的常见错误。

您可以通过将 this 分配给变量来保留对它的引用来解决此问题:

get_data_for_popover_and_display = function() {
    var el = $(this);
    var _data = el.attr('alt');
    $.ajax({
         type: 'GET',
         url: '/myresource',
         data: _data,
         dataType: 'html',
         success: function(data) {
             el.attr('data-content', data);
             el.popover('show');
         }
    });
}

或者,您可以编写 var that = this; 并在任何地方使用 $(that)。更多解决方案和背景here .

关于javascript - 设置数据内容并显示弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8067321/

相关文章:

javascript - 检查 URL 中的 GET 变量

css - Bootstrap 文件未在运行时加载

jquery - 如何覆盖页面某些部分的默认 Bootstrap 样式

css - 使用 Bootstrap 创建具有 "dynamic"图像大小的网格

javascript - 在React中播放状态相关的音频文件

javascript - Nodemailer 和 Mailgun

javascript - 如何根据元素的位置设置准确的背景位置?

javascript - jquery如何找到元素的偏移量?

javascript - 从 YouTube 嵌入代码中提取视频 ID

javascript - jQuery 如何将数据放入 HTML (.data)