Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数据值在DOM中更新,但在函数中不更新_Javascript_Jquery_Dom - Fatal编程技术网

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如果要更新属性,请在jQuery
attr()
中使用以获取和设置。现在要添加更多的混淆,要真正更新数据属性和对象,应该使用:。设置:
$(“#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
   }