我知道我可以在复选框上添加一个click
或change
侦听器。当复选框未选中时,处理程序将按钮的disabled
prop
更改为true
。这很容易。任何方式来创建“状态”侦听器而不是“事件”侦听器?
但是,这不是事件驱动的,有没有办法让这是“状态”驱动?
如果取消选中复选框的“状态”,则该按钮的“状态”将始终处于禁用状态。什么样的事件触发状态改变并不重要。如果复选框处于一种状态,则该按钮始终处于相应的状态。而已。
下面是标准事件驱动代码的示例,其中只要未选中条款和条件复选框,就应禁用结帐按钮。
$('input[name="terms-and-conditons"]').change(function(e, tmpl){
if(e.target.checked === true){
$('#checkout-button').prop("disabled", false);
} else {
$('#checkout-button').prop("disabled", true);
};
});
不幸的是,这并没有考虑到初始状态,因为它需要事件发生才能发生。在页面加载,如果该复选框被选中时,按钮仍然可以启用,除非小心地记得按钮的初始状态设置为禁用:
// setting the initial state
$('#checkout-button').prop("disabled", true);
$('input[name="terms-and-conditons"]').prop("checked", false);
$('input[name="terms-and-conditons"]').change(function(e, tmpl){
if(e.target.checked === true){
$('#checkout-button').prop("disabled", false);
} else {
$('#checkout-button').prop("disabled", true);
};
});
我不知道是否有一种方法创造一个“国家听众”。无论发生什么事件(即使没有事件,如页面加载的默认值),按钮状态将始终与复选框状态保持一致。它可以通过单击,空格按键,更改事件,只需在Chrome控制台中直接编辑HTML的人员进行更改,或者它可能刚刚以某种状态加载。关键是,只是的东西是。而某些事物的状态会随着其他事物的状态而自动改变。
有没有这样的功能,你要求内置到浏览器。您必须通过观察所有可能的事件来指明相关状态的变化,从而通过自己的JS实现它。 – jfriend00
这就是我一直在做的事情。所以解决方案实际上只是为单个ID或类复选框注册一大堆事件侦听器和处理程序,并希望您没有忘记解释某个事件? – fuzzybabybunny
在现代浏览器中,特定属性上的[MutationObserver](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)可能是更通用的更改侦听器吗? – jfriend00