【发布时间】:2025-12-24 19:40:06
【问题描述】:
我有一个链接,它根据页面上的活动动态更改某些参数。替换值的功能似乎工作正常,我可以在 chrome 开发人员工具的“元素”窗口中看到它正在更新。但是,当我尝试从另一个 JS 函数中读取该值时,它根本没有改变。
我为这个问题做了一个非常简化的例子:
<a href="#" id="a-delete-page" data-action="data/1/pageid/0/">
check data-action value</a>
<a href="#" id="toggle">set new value</a>
<script>
$('#a-delete-page').click(test);
$('#toggle').click(toggleValue);
function toggleValue(){
var newValue = '123';
$("#a-delete-page").attr('data-action',newValue);
alert("new value set:"+newValue);
}
function test(){
alert($(this).data('action'));
}
</script>
在这里试试:http://jsfiddle.net/2hj3e/
首先点击“check data-action value”,你会看到data-action参数。然后单击设置新值(您会在开发人员工具中看到它发生了变化)并再次单击“检查数据操作值”。我希望它打印 123,但它仍然打印“data/1/pageid/0/”。
谁能帮助我理解这一点,并指导我如何解决这个问题。
【问题讨论】:
-
数据对象和数据属性不是一回事。只有 DOM 加载时的 jQuery 会将 data-* 属性解析为数据对象,但更改 data-* 属性不会更新数据对象,请参阅 jsFiddle 解决您的问题:jsfiddle.net/2hj3e/1
-
它不会在 DOM 加载时发生,它会在您第一次在元素上调用
.data()时发生。在他的 jsfiddle 中,当它使用旧数据调用updateUrlParameter时会发生这种情况。
标签: javascript jquery