javascript - 如何检查用户是否通过 jQuery selectable 选择了一个项目?
问题描述
我有一个带有 jQuery 可选和一个按钮的可选列表。该按钮通常默认禁用,但如果用户在我的表中选择一个或多个条目,我想启用它,或者如果选择为 0,我想再次禁用它。我该怎么做?
jQuery(document).ready(function($) {
$("#selectable").bind("mousedown", function(e) {
e.metaKey = true;
}).selectable({
stop: function() {}
//Somehow I need to enable/disable my button if there is a selected item
});
});
#feedback {
font-size: 1.4em;
}
#selectable .ui-selecting {
background: #FECA40;
}
#selectable .ui-selected {
background: #F39814;
color: white;
}
#selectable {
list-style-type: none;
margin: 0;
padding: 0;
width: 60%;
}
#selectable li {
margin: 3px;
padding: 0.4em;
font-size: 1.4em;
height: 18px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js" integrity="sha512-uto9mlQzrs59VwILcLiRYeLKPPbS/bT71da/OEBYEwcdNUk8jYIy+D176RYoop1Da+f9mvkYrmj5MCLZWEtQuA==" crossorigin="anonymous"></script>
<ol id="selectable">
<li class="ui-widget-content">Item 1</li>
<li class="ui-widget-content">Item 2</li>
<li class="ui-widget-content">Item 3</li>
<li class="ui-widget-content">Item 4</li>
<li class="ui-widget-content">Item 5</li>
<li class="ui-widget-content">Item 6</li>
<li class="ui-widget-content">Item 7</li>
</ol>
<button disabled>Trigger</button>
解决方案
实现这一点的一种方法是当可选插件触发选定和未选定事件时,通过 css 选择器检查选择了多少 li 元素。
$(document).ready(function($) {
$("#selectable").bind("mousedown", function(e) {
e.metaKey = true;
}).selectable({
selected: function( event, ui ) {
updateButton()
},
unselected: function( event, ui ) {
updateButton()
},
});
});
function updateButton() {
const qntSelected = $('#selectable li.ui-selected').length;
$('button').attr('disabled', qntSelected === 0);
}
#feedback {
font-size: 1.4em;
}
#selectable .ui-selecting {
background: #FECA40;
}
#selectable .ui-selected {
background: #F39814;
color: white;
}
#selectable {
list-style-type: none;
margin: 0;
padding: 0;
width: 60%;
}
#selectable li {
margin: 3px;
padding: 0.4em;
font-size: 1.4em;
height: 18px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js" integrity="sha512-uto9mlQzrs59VwILcLiRYeLKPPbS/bT71da/OEBYEwcdNUk8jYIy+D176RYoop1Da+f9mvkYrmj5MCLZWEtQuA==" crossorigin="anonymous"></script>
<ol id="selectable">
<li class="ui-widget-content">Item 1</li>
<li class="ui-widget-content">Item 2</li>
<li class="ui-widget-content">Item 3</li>
<li class="ui-widget-content">Item 4</li>
<li class="ui-widget-content">Item 5</li>
<li class="ui-widget-content">Item 6</li>
<li class="ui-widget-content">Item 7</li>
</ol>
<button disabled>Trigger</button>
推荐阅读
- javascript - 如何在 React 函数中创建复选框
- angular - 在 Angular 7 中使用 Jest 进行测试时缺少 Kendo Intl Service 的语言环境信息
- ios - 如果我已经有了他/她的名字,我如何访问/获取特定联系人的所有详细信息?
- c++ - 错误:没有用于调用“子类::...”的匹配函数
- php - 如何在 laravel 5.7 中同时使用 Auth 和 Config?
- java - Android WebView 获取本地存储值
- python - 从测试中将参数传递给 Pytest 固定装置内的 Patch
- javascript - ApolloConsumer 直接更新缓存
- angular - 我想显示从开始日期到结束日期的消息
- wordpress - 权限自行访问服务器上的changend