在我的脚本中基于布尔值更新DOM时遇到问题
Having trouble updating DOM based on boolean value in my scripts
我正试图在"管理用户"页面上为我的应用程序创建和"编辑"模式。我在具有readonly
属性的<input>
标记中有每个用户的值(如姓名、电子邮件等)。我在页面顶部有一个按钮,叫做"编辑模式"。当点击该编辑模式时,我希望管理员能够点击输入字段并对其进行更改。我能够在点击时成功切换readonly
属性,但我只希望在editing == true
时实现该功能,但在某个季节,当编辑布尔值发生更改时,DOM似乎从未感测到。这是代码
$(document).ready(function(){
var editing = false;
$(".edit-mode-toggle").click(function(){
editing = true;
});
if(editing){
$("user-block input").click(function(){
$(this).removeAttr("readonly");
});
}
$(".user-block input").blur(function(){
$(this).attr("readonly", true);
})
});
同样,我只想在单击".edit-mode-toggle"
按钮并将editing
变量更改为true
时使用removeAttr
。我目前的输出是,当我点击该按钮切换布尔值时,我无法执行编辑,因为DOM没有看到布尔值发生了变化。任何人都知道可能发生了什么。一旦我找到解决方案,我肯定会的。我只是在这里留白。顺便说一句,严格来说jQuery,我知道使用Angular或其他3向数据绑定框架可以很容易地做到这一点,但我想避免使用它们。非常感谢。
Dom在加载时只运行if(editing)
条件,您需要将该部分移动到click
函数中。
$("user-block input").click(function(){
if(editing){
$(this).removeAttr("readonly");
}
});
此外,您需要在$(document).ready()
函数之外定义var editing
。
var editing = false;
$(document).ready(function(){
//other stuff
})
您应该更新您的代码,因为您在页面加载中附加了点击事件,并且IF语句中的第二个条件将始终被附加,因为在页面加载时"editing"变量总是设置为false。
要修复它,您必须使变量"编辑"为全局变量
var editing = false;
$(document).ready(function(){
$(".edit-mode-toggle").click(function(){
editing = true;
});
$("user-block input").click(function(){
if(editing){
$(this).removeAttr("readonly");
}else {
$(this).attr("readonly", true);
}
});
}
});
相关文章:
- 如何确定Vue何时完成DOM更新
- DOM 更新问题
- ReactJS:如何从 DOM 更新 React
- 同一函数中的多个 DOM 更新
- Meteor JS渲染和DOM更新
- 简单的 AngularJS DOM 更新
- Safari:绝对定位的DIV在通过DOM更新时不会移动
- 任何视图模型dom更新的Knockout JS事件
- 使用DOM更新时不会触发输入文本事件
- 在Webkit中同步重绘/等待DOM更新
- 在不触发DOM更新的情况下更改URL
- Rails 3和Ajax/JSON/JQuery/直接DOM更新-与Scaffold程序一起使用
- 什么时候DOM更新完成,在javascript中添加子元素
- 羊驼javascript dom更新
- jQuery/Javascript -如何在继续执行函数之前等待被操纵的DOM更新
- 如何使用javascript和HTML DOM更新HTML元素的颜色?
- dojotoolkit中DOM更新有轻微延迟
- 暂停jQuery就绪事件,直到多个HTML DOM更新完成
- 严重的问题与后退按钮,Chrome和DOM更新
- 有没有一种编程方法来知道jQuery的DOM更新何时完成