【问题标题】:data attribute changed but not applied [duplicate]数据属性已更改但未应用[重复]
【发布时间】:2021-01-07 10:23:07
【问题描述】:

我有一个具有如下数据属性的跨度:

<span class="delete" data-action="enable" title="Non usare più questa anagrafica" data-toggle="tooltip" data-placement="top" >  

单击跨度时,我会寻找 data-action 属性以在后端执行我的操作,它工作正常:

$('.delete').click(function(e){
    e.preventDefault();
    var clicked = $(this);
    var toggle = $(this).children('i');
    var id = $(this).closest('div').data('value');
    var action = $(this).data('action');

如果一切正常,我想将数据操作更改为“禁用”,因为此跨度充当开/关按钮,所以我这样做:

if(action=='enable'){
    toggle.removeClass('fa-toggle-off text-red').addClass('fa-toggle-on text-green');
    toggle.parent('span').data('action','disable');
    toggle.parent('span').attr('data-original-title','Non usare più questa anagrafica');
}else{
    toggle.removeClass('fa-toggle-on text-green').addClass('fa-toggle-off text-red');
    toggle.parent('span').attr('data-action','enable');
    toggle.parent('span').attr('data-original-title','Riattiva questa anagrafica');
}

如果我检查页面上的元素,我会发现数据操作已正确更新。

问题是,如果我再次单击按钮,console.log(action) 仍将返回原始数据操作值而不是更新的值(即使检查元素我看到更新的值)。 我在这里想念什么?每次单击按钮时都会重新设置操作,所以我不希望它仍然是上一次迭代的值......另外,如果我有一个按钮已经在页面加载时操作“禁用”,我的代码工作正常.有什么提示吗?

【问题讨论】:

  • 特别是这个答案:stackoverflow.com/a/45149219/2181514
  • @freedomn-m 实际上我的问题可以作为拼写错误关闭......这是由我的代码的一次出现中使用的 attr 而不是数据引起的。因此,出于这个原因,我投票关闭它(而不是在努力解决后将其删除)。谢谢

标签: javascript jquery


【解决方案1】:

您正在使用attr()data() 更新和读取数据属性。您必须使用其中一个,而不是同时使用两者,因为它们会影响不同位置的数据属性。 attr() 直接更新 DOM,而 data() 更新内存中的对象。

我建议只使用data()

toggle.toggleClass('fa-toggle-off text-red fa-toggle-on text-green');

if (action == 'enable') {
  toggle.parent('span').data({
      'action': 'disable',
      'original-title': 'Non usare più questa anagrafica'
    });
} else {
  toggle.parent('span').data({
    'action': 'enable',
    'original-title': 'Riattiva questa anagrafica'
  });
}

【讨论】:

  • 是的 attr 和数据组合。但对于 original-title 属性,我需要使用 attr 使其正常工作,因此我无法按照您的建议折叠代码(我也会这样做)
  • data-original-title 是从哪里读取的?如果可能,最好将其更改为也使用data()
  • 它是由 tooltip.js 在页面渲染时动态设置的,所以我几乎无法控制它
  • 在这种情况下,您可能需要保留 original-title 以使用 attr() 获取/设置(尽管我建议找到一个不会强制执行该限制的更好的库)。不过,上面的答案将解决您对data-action 的问题。
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多