为啥jquery看不到html的变化? [复制]

Posted

技术标签:

【中文标题】为啥jquery看不到html的变化? [复制]【英文标题】:Why does jquery not see changes in html? [duplicate]为什么jquery看不到html的变化? [复制] 【发布时间】:2019-11-05 16:49:42 【问题描述】:

我发出一个 Ajax 请求,之后我更改了一个属性值。在 DOM 中,一切都按预期变化。但是当我再次单击该按钮时,旧的属性值会显示在控制台中。似乎他没有看到标记的变化并加载了旧数据。

$('.more_credits_first').click(function () 
	var button = $(this)
	var show = $(button).data('show');
	console.log(show)

	if (show == 'show') 
		$.get(window.location.pathname,).done(function(data)
			$('.tbody.main_credits').append(data.template);
			$(button).attr('data-show', 'hide');
			$(button).text('Hide');
		)
		else 
		$(this).attr('data-show', 'show');
		$(this).text('More');
	
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class='more_credits_first' type="button" data-show='show'>Button</button>

【问题讨论】:

Access to XMLHttpRequest at 'https://stacksnippets.net/js' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.done 函数永远不会被调用,因此 data-show 在您的示例中永远不会被修改。 【参考方案1】:

见the documentation:

从 jQuery 1.4.3 开始,data-* 属性用于初始化 jQuery 数据。元素的 data-* 属性在第一次调用它的 data() 方法时被检索,然后不再被访问或改变(所有值都由 jQuery 内部存储)。

jQuery 缓存 data()。你可以使用一个属性值来初始化它,但是jQuery只会查看它的内部记录。

不要将 jQuery 的 data() API 与 attr() 混用。也可以使用data() 设置值。

【讨论】:

那个。并确保您的请求成功,因为您只有 .done() 处理程序,当网络错误发生时不会运行。 非常感谢帮助。

以上是关于为啥jquery看不到html的变化? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 MySQL 复制中使用 GTID?

jquery 选取不到节点

为啥通过jQuery中的for循环后数组顺序是随机的? [复制]

jquery text获取不到值为啥

为啥“x”的值发生了变化? [复制]

unity5怎样正确导入FBX,模型大小为啥会发生变化