Javascript 在动态函数中覆盖jQuery全局Objevt变量
在全局对象中,有一些设置应该根据某些用户输入进行更改。例如,如果为div 1选择“否”,则div one不仅会被隐藏,变量的值也会更新为0 问题在于隐藏div的函数是动态的,它使用数据来帮助找到要隐藏的正确div。我无法覆盖正确的全局变量 我已经尝试过一些方法,比如添加标记以帮助确定特定变量的目标,但效果并不理想 HTML jQueryJavascript 在动态函数中覆盖jQuery全局Objevt变量,javascript,jquery,html,Javascript,Jquery,Html,在全局对象中,有一些设置应该根据某些用户输入进行更改。例如,如果为div 1选择“否”,则div one不仅会被隐藏,变量的值也会更新为0 问题在于隐藏div的函数是动态的,它使用数据来帮助找到要隐藏的正确div。我无法覆盖正确的全局变量 我已经尝试过一些方法,比如添加标记以帮助确定特定变量的目标,但效果并不理想 HTML jQuery var settings = { enableDivOne: 1, // overwrite this when div 1 option is ch
var settings = {
enableDivOne: 1, // overwrite this when div 1 option is changed
enableDivTwo: 1 // overwrite this when div 2 option is changed
};
$('.toggle').change(function () {
var target = $(this).data("target"),
element = $(this),
name = element.val(),
is_checked = element.prop('checked'),
setting = $(this).data("setting");
if (name == 'yes') {
$(target).slideDown(300);
console.log(settings.enableDivOne);
console.log(settings.enableDivTwo);
} else {
$(target).slideUp(300);
console.log(settings.enableDivOne);
console.log(settings.enableDivTwo);
}
});
总而言之,我试图找出一种动态的方法来改变某些变量
我相信你要找的是这样的东西
var settings = {
enableDivOne: 1,
enableDivTwo: 1
};
$('input:radio.toggle').change(function(e) {
var target = $('#div-' + $(this).data("target")),
value = $(this).val();
settings[$(this).prop('name')] = value;
target.slideToggle(300);
console.log("div one :" + settings.enableDivOne);
console.log("div two :" + settings.enableDivTwo);
});
我把你的目标分数从
data-target=".div-one"
到
作为个人喜好;感觉更有语义
您可以在此处进行测试:
我想你差不多已经知道答案了,但我会告诉你一些可能有用的东西 对象属性实际上只是字符串。当它们是有效的JavaScript标识符时,可以使用点表示法访问它们,当它们变得更复杂时,可以使用括号表示法访问它们。这意味着您可以使用标记中的任何常量值作为参考点。在您的示例中,两个不同的常量是对单选按钮进行分组的
name
属性
对标记没有任何更改,请考虑此示例。您可以通过找出一个对您有效的命名模式来构建这个模型,这可能取决于您计划如何在代码的其他部分中使用这些值
var boolMap={
“是”:是的,
“否”:错误
};
变量设置={};
$('.toggle').change(函数(){
var target=$(this).data('target'),
name=$(this.attr('name'),
value=$(this.val();
if(boolMap[value]){
美元(目标)。向下滑动(300);
}否则{
美元(目标).slideUp(300);
}
设置[名称]=(布尔映射[值]?1:0);
控制台日志(设置);
});代码>
div{
宽度:300px;
高度:300px;
背景:黑色;
颜色:白色;
利润率:10px;
}
第1部分
对
不
第2组
对
不
一个
两个
您知道可以使用括号语法引用属性吗?例如,你可以做设置[name]=0
。是的,我同意-它确实让人感觉更干净、更具语义,这是一个很好的提示。奇怪的是,如果设置对象中有另一个设置,例如divSettings,这会发生什么变化?请参见:您只需在对象树上向下移动一个级别,将settings[$(this).prop('name')]
更改为settings.divSettings[$(this).prop('name')]
是否可以使.divSettings部分成为动态的-可能是在HTML中的某个地方等?确保可以使用DOM的任何属性,如id egsettings[target.prop('id')][$(this.prop('name'))
这可能更好地解释了我的意思-如果需要,我想通过从html中提取更精确的内容来定位settings.divSettings。
var settings = {
enableDivOne: 1,
enableDivTwo: 1
};
$('input:radio.toggle').change(function(e) {
var target = $('#div-' + $(this).data("target")),
value = $(this).val();
settings[$(this).prop('name')] = value;
target.slideToggle(300);
console.log("div one :" + settings.enableDivOne);
console.log("div two :" + settings.enableDivTwo);
});
data-target=".div-one"
data-target="one"