javascript - Javascript这个范围问题
问题描述
我做了两个下拉菜单,但每个选择都会影响另一个
var dd = new DropDown( $('.f-box') );
我已将它们限定为this
但它没有识别唯一元素,但会影响所有匹配选项。
DropDown.prototype = {
initEvents : function() {
var obj = this;
obj.dd.on('click', function(event){
$(this).toggleClass('active');
return false;
});
obj.opts.on('click',function(){
var opt = $(this);
obj.val = opt.text();
obj.index = opt.index();
obj.placeholder.text(obj.val);
});
}
}
它看起来像是 obj.opts.on('click',function(){}
匹配所有.f-box
元素,而不是当前被点击的元素。我分配它的方式$(this)
不正确吗?
解决方案
问题是因为您为函数提供了所有.f-box
元素Dropdown()
,因此它对所有元素都起作用。
解决这个问题的快速方法是循环.f-box
并单独调用它们的函数:
$('.f-box').each(function() {
new DropDown($(this));
});
但是,完全更好的方法是将此逻辑更改为 jQuery 插件。然后标准模式是单独处理每个元素。
推荐阅读
- go - Go lang 多等待组和计时器最终停止
- c# - C# WinForms - 奇怪的边框
- c++ - 忽略数组中的重复项
- java - 我们什么时候得到不能将 X 类转换为 X 类的异常?
- javascript - 在 WordPress 中将滑块插件设置为主题的标题
- c# - EF Core - 列不允许空值。插入失败
- python - Pandas groupby date - 特定日期期间
- ruby-on-rails - nil:NilClass 的未定义方法“each” - 通过 Carrierwave gem 上传视频时出错
- swift - 如何在 UITableView 内的 UITabBar 顶部添加 UIButton
- java - 删除多对多条目,同时将两个对象保留在数据库中