我有一个数组,其中保存了一些复选框ID号,这些编号在用户单击表中的某些复选框时添加。如果数组为空,我想禁用按钮,并在有某些项目时启用它。
var ids = [];
$('#Table tbody').on('click', '.checkbox', function () {
var idx = $.inArray($(this).attr("id"), ids);
if (idx == -1) {
ids.push($(this).attr("id"));
} else {
ids.splice(idx, 1);
}
});
监视数组并检查是否已将元素添加到id数组或调低为0以启用/禁用按钮的最佳方法是什么?
<input class="btn disabled" type="submit" name="submit" id="btnsubmit" value="Submitselected"/>
答案 0 :(得分:1)
点击复选框后,您已经运行了该功能(也许change
事件更适合您)-现在只需修改按钮上的disabled
道具即可:
$("#btnsubmit").prop("disabled", ids.length === 0);
答案 1 :(得分:1)
我想在这里扩展@PeterRadar的答案,因为它实际上是一个很好的建议。基本上,这里的想法是将监视的数组包装在一个代理中,然后使用该代理来基本“订阅”更改。将该建议与this answer和@tymeJV结合使用,结果代码将类似于以下代码片段:
var array = [true];
var updateButtonVisibility = function() {
$("#test").prop("disabled", array.length === 0);
}
$( document ).ready(function() {
var arrayChangeHandler = {
get: function(target, property) {
updateButtonVisibility();
console.log('getting property ', property);
return target[property];
},
set: function(target, property, value, receiver) {
target[property] = value;
updateButtonVisibility();
console.log('setting property ' + property + ' length is ' + array.length);
return true;
}
}
var wrappedArray = new Proxy(array, arrayChangeHandler )
$("#add").click(function() {wrappedArray.push(true);});
$("#subtract").click(function() {wrappedArray.pop();});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<button id="test" type="submit">HELLO</button>
<button id="add" type="submit">Add</button>
<button id="subtract" type="submit">Subtract</button>
</body>
以这种方式使用代理(wrappedArray
对象)使您可以在每次使用其setter和getter写入对象或从中读取对象时运行自定义行为。在您的示例中,意味着禁用按钮的功能会在对象更改时运行,而不仅仅是单击另一个ui组件时。这意味着您对按钮的禁用/启用状态的实现未绑定到任何特定的UI组件。只要通过此wrappedArray
使用访问权限,无论是什么原因导致设置/获取,您的禁用/启用状态都会按照您想要的方式进行更新。