javascript - 如何在一页上使用此多选下拉菜单两次,以便每个实例输出到自己的数组?
问题描述
我想为我正在设计的表单在一个页面上放置两个单独的 multiselct 下拉菜单。
我发现这个可爱的下拉列表带有我想使用的复选框:
https://codepen.io/bseth99/pen/fboKH
我试图找出在同一页面上运行此下拉列表的两个实例的最佳方法,以便每个下拉列表的选择都保存在它们自己的数组中。
var options = [];
$( '.dropdown-menu a' ).on( 'click', function( event ) {
var $target = $( event.currentTarget ),
val = $target.attr( 'data-value' ),
$inp = $target.find( 'input' ),
idx;
if ( ( idx = options.indexOf( val ) ) > -1 ) {
options.splice( idx, 1 );
setTimeout( function() { $inp.prop( 'checked', false ) }, 0);
} else {
options.push( val );
setTimeout( function() { $inp.prop( 'checked', true ) }, 0);
}
$( event.target ).blur();
console.log( options );
return false;
});
现在,如果我在我的页面上放置两个按钮的 HTML 实例,两个下拉菜单都会修改相同的“选项”数组,因为它使用下拉菜单的类选择器。我知道我可以使用 ID 选择器而不是类选择器,然后使用不同的数组再次使用相同的 jQuery 块,但这真的是最好的方法吗?我是 jQuery 的新手,但这似乎很臃肿。
解决方案
$( '.dropdown-menu a' ).on( 'click', function( event ) {
var $target = $( this ),
val = $target.data( 'value' ),
$inp = $target.find( 'input' ),
idx;
var options = $target.closest('.dropdown-menu').data('options') || [];
if ( ( idx = options.indexOf( val ) ) > -1 ) {
options.splice( idx, 1 );
setTimeout( function() { $inp.prop( 'checked', false ) }, 0);
} else {
options.push( val );
setTimeout( function() { $inp.prop( 'checked', true ) }, 0);
}
$target.closest('.dropdown-menu').data('options', options);
$( event.target ).blur();
return false;
});
console.log($( '.dropdown-menu:eq(0)' ).data('options'));
推荐阅读
- python - 在数据集上使用 usaddress.parse 有困难。(在蟒蛇中)
- sql - Postgresql - 重新格式化查询返回顺序
- python - 使用套接字将视频从一台 PC 传输到另一台 PC
- php - 如何获取两个日期之间每 2 周的星期一和星期三日期
- python - 如何从 Flask 应用程序向外部服务发出 http 请求并等待回调
- php - 使用 php json 和 react-native 获取数据的问题
- tableau-api - Tableau:确保协作环境中的数据完整性
- java - 通过使用条件的嵌套列表元素将对象与另一个列表匹配来过滤对象
- javascript - 从 HDD 读取 HTML 文本文件不显示任何结果
- node.js - mongoose.findOne 返回 null