检测数据的变化
detect data- on change
当另一个div的数据属性发生变化时,我正在尝试更改div的值。我正试着做
$('.language-rate').attr("data-rate-value").on('change', function () {
$('.language-d').text($('.language-rate').attr("data-rate-value"));
});
但它登录控制台:
未捕获的类型错误:无法读取未定义的属性"on"
我该怎么做?
我的观点是:
@using (Ajax.BeginForm("LanguagesTable", new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "languages"
}))
{
<div class="language-content">
@Html.TextBoxFor(m => m.newLanguages.LanguageName, new { @class = "pcontent-left main-color" })
<div class="rate language-rate"></div>
@Html.HiddenFor(m => m.newLanguages.Star, new { @class = "language-d" })
</div>
<div class="add-education">
<button type="submit" name="pcprograms" value="add" class="add-education-button-sm">add</button>
</div>
}
我使用的是rater js,当星率变化时,我想检测并通过我的模型(这是隐藏的形式控制)
已编辑
我正在这么做:
$('.language-rate').on('change', function () {
$('.language-d').text($('.language-rate').attr("data-rate-value"));
});
但它在第二次点击div后就可以工作了。因为我想检测属性更改事件
不幸的是,您无法将事件挂接到数据属性上。SO和其他来源上有很多关于这方面的帖子。您可以创建一个经常运行的函数(例如,每200毫秒运行一次),并检查div的数据属性值是否发生了更改。这里有一个例子,我希望它能帮助你:
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
var _old = $("#test").attr('data-value');
setInterval(function () {
var _new = $("#test").attr('data-value');
if(_old != _new)
{
alert('The data attribute of the div has been changed to - ' + _new);
_old = _new;
}
}, 200);
$("#changeData").click(function () {
$("#test").attr('data-value',new Date().toLocaleTimeString());
});
});
</script>
<div id="test" data-value="Test">
</div>
<input type="button" id="changeData" value="Change Data Attribute" />
如果您正在寻找DOM更改处理,这个问题仍然很重要。
现在你可以使用像MutationObserver
这样性能很好的类
您可以使用以下代码片段轻松地钩住data-rate_value
的更改:
// fake data attribute change
const node = document.getElementById("example")
const set_to_five = () => {
node.dataset["rate_value"] = "5"
}
const set_to_one = () => {
node.dataset["rate_value"] = "1"
}
// continuously change data attribute
setInterval(() => {
set_to_five()
setTimeout(set_to_one, 2500)
}, 5000)
const observer = new MutationObserver((mutations, observer) => {
mutations.forEach((mutation) => {
console.log(mutation);
});
})
observer.observe(node, {
attributes: true, // this can be omitted
attributeFilter: ["data-rate_value"]
});
<div id="example" style="background-color: red; width: 100px; height: 100px;"></div>
相关文章:
- 检测数据的变化
- 控制器切换后匿名功能中的访问服务数据发生变化
- 从不断变化的动作创建者那里获取商店数据是否是一种常见的做法
- Jquery-背景图像随select中的数据属性而变化
- 在交互式图表中动态缩放数据,其中数据会发生变化
- 聚合物动态变化数据阵列
- 当Firebase数据发生变化时,Google 图表不会更新
- 如何处理 redux 存储所持有的数据中不断变化的属性
- 角度类型提前:观察数据集的变化
- 使用套接字io和angularjs处理频繁变化的时间序列数据的策略
- 如何正确地通知聚合物中兄弟姐妹之间的数据变化
- Highcharts日期格式随数据变化
- 如何在单元格中的下拉列表值发生变化时仅在手动可接触的少数列上加载数据
- 当web返回的数据发生变化时,如何从javascript调用getweb服务
- 如果在素数面数据表中添加新行,如何检测表单中的变化
- 如何根据下拉列表中的变化使用d3.js对数据集进行子集设置
- 是否有一种有效的方法来传递用户端JS数据到后端c#,每次它的变化
- jQuery得到html5数据值的变化
- 使用javascript / jqplot可视化以小间隔变化的时间序列数据
- 当保存较少的数据时,鼠标光标的变化太快