1

我正在使用引导popover程序jquery-raty。我有hiddendiv 在带有 JS 函数的 popover 上显示它们content:。我想更新隐藏 div 中的一些属性。假设我data-rating在隐藏的 div 中有属性。我想更新data-rating价值。我正在使用以下语句。

('#hidden_div_1`).data('rating', '25');

当我打印数据属性时,console.log($('#hidden_div_1').data('rating'));我得到25了正确的。但是,当我再次将鼠标悬停在特定对象上以显示弹出框时,我得到old了属性值。值为destroying when popover disappeared。我不知道为什么。有人帮忙吗?

这是我的完整 jquery 代码。这是小jsfiddle

谢谢

编辑1:$('#hidden_div_1').data('rating', '25');

编辑2:这很奇怪。data-rating值不变。我已经附加了console.log输出。

控制台日志

代码 >

$('.link-container a').popover({
        content : function() { return $(this).siblings('.popover-content').html(); },
        trigger: 'click',
        html: true
    }).click(function(){
      $('.ratings').raty({
        score: function() { return $(this).attr('data-rating'); },
        click: function(score, evt, data) {
            //alert(score);
            var currentId = $(this).attr('id');
            console.log($("#"+currentId).data('rating'));
            alert(currentId);
            $("#"+currentId).attr('data-rating', score);
            console.log($("#"+currentId).data('rating'));
            $("#"+currentId).data('rating', score);
            console.log($("#"+currentId).data('rating'));

        },
          path: '/static/img/rating/',
      });
    });

alert(currentId);打印correct标识。

4

2 回答 2

2

编辑

我对此进行了更详细的研究,问题是您正在将内容传递给 Bootstrap 弹出窗口。

此 html 内容包含一个 ID(例如#hidden_div_1),但问题是您传递给 Bootstrap 弹出框的任何内容都会在该弹出框中复制

换句话说,您最终会得到重复的 ID,而 JQuery 不知道您要引用什么元素。

所以解决的办法就是把数据信息放到容器div中(本例中link-container),像这样:

<div class="link-container" data-rating="1" data-price="10">
    <a href="#" data-title="Title 1" id="r1">Click Here</a>
    <div class="temp-popover-content hidden">
        <p> Click on following images</p>
        <div class="ratings"></div>
        <p>Some content 1</p>
    </div>
</div>

然后你可以在不混淆 JQuery 的情况下针对这个链接容器存储数据,如下所示:

$('.link-container a').popover({
    content : function() { return $(this).siblings('.temp-popover-content').html(); },
    trigger: 'click',
    html: true
}).click(function(e) {
  // Added this because popovers get confused when more than one with a raty is open
  $('.link-container a').not(this).popover('hide');
  // storage refers to the link-container div
  var storage = $(this).parent();
  $('.ratings').raty({
        score: function() { return storage.data('rating'); },
        click: function(score, evt, data) {
            storage.data('rating', score);
            console.log("Data: "+storage.data('rating')); 
        }
  });
});

小提琴在这里

于 2013-02-03T16:33:59.970 回答
0

看来您缺少一个“$”。它应该是

$('#hidden_div_1').data('rating', '25');
于 2013-02-03T12:04:53.520 回答