Javascript 数据值在DOM中更新,但在函数中不更新
我根据用户的选择更改按钮的文本Javascript 数据值在DOM中更新,但在函数中不更新,javascript,jquery,dom,Javascript,Jquery,Dom,我根据用户的选择更改按钮的文本 $(".someClass").click(function() { $("#someID_1").text($(this).prop("innerHTML")); $("#someID_1").attr("data-value", $(this).data("value")); someFunction("someID_1"); }); 然后我想调用一个函数someFunction function someFunction(some
$(".someClass").click(function() {
$("#someID_1").text($(this).prop("innerHTML"));
$("#someID_1").attr("data-value", $(this).data("value"));
someFunction("someID_1");
});
然后我想调用一个函数someFunction
function someFunction(someID) {
console.log(parseInt($("#" + someID).data("value")))
if ( parseInt($("#" + someID).data("value")) !== 10 ) {
// do something
} else {
// do something else
}
}
发生的是,console.log
在第一次函数调用(因此,第一次单击)上绘制选择的数据值。但是,当我选择新的内容并再次执行函数时,通过控制台.log绘制的数据值保持不变。查看DOM
,数据值也会更新
为什么会这样?因为.data()
使用内部缓存,所以它只使用数据属性作为默认值,更新属性不会影响它
您需要使用.data(键、值)
来设置值。如果需要更新DOM,请使用.attr()
如果使用attr()。您不应该使用的是attr()
和data()
的混合。如果您没有更新属性的真正原因,那么使用data()
获取并设置值 试试看
$(document).on('click', ".someClass", function()
{
//your event logic
}
数据值将更新。我可以在我的DOM
@stopface中看到它,.data()
仅将属性值用作默认值,如果您更新属性,则它永远不会used@Stophface如果要更新属性,请在jQueryattr()
中使用以获取和设置。现在要添加更多的混淆,要真正更新数据属性和对象,应该使用:。设置:$(“#someID_1”)[0].dataset.value=666代码>并获取:$(“#someID_1”)[0].dataset.value
和jQuery$.fn.data
,正如您所看到的,这可能会非常混乱。当我再次更新它时,您可以比较和@Stophface之间非常意外的结果,如果您使用attr()
获取和设置,它将保持不变,否,您将获得更新的值。您不应该使用的是attr()
和data()
的混合。如果您没有更新属性的真正原因,那么使用data()
获取并设置值。首选的方法实际上取决于您的实际用途case@Stophface如果使用$(“#someID_1”).attr(“数据值”),$(this.data(“值”))进行设置,则不应出现这种情况
然后使用$(“#someID_1”).attr(“数据值”)
要获取它,请注意您的parseInt
必须指定您的基:parseInt($(“#“+someID).data(“value”),10)
$(document).on('click', ".someClass", function()
{
//your event logic
}