我需要知道用户是否已点击已检查过广播,或者他做出了新的选择。 现在我通过“焦点”,“点击”和“更改”事件组合检测到它(在“焦点”中存储旧值,并将其与“点击”或“更改”中的当前值进行比较,以检测并处理点击已经检查过的广播)
只是为了澄清:我无法在点击处理程序中保存以前的状态,因为我无法在此处获得初始状态;或“焦点+点击”或“加载+(上一个)点击+点击”;
但它对我来说看起来像是一个黑客,我认为使用内置的jquery功能使用一个事件处理程序更直接的方式 >。 有这样的事吗?
提前致谢!
答案 0 :(得分:1)
使用mousedown
作为@Bukent Vural建议。
使用$('input[name=test]:checked').val();
更改前获取当前值,
在哪里'测试'是您的无线电输入的名称。
请看一下 JSFiddle 。
修改强>
如果您还想检测标签点击,则需要添加第二个事件处理程序:
$('label').click(function() {
labelID = $(this).attr('for');
$('#'+labelID).trigger('mousedown');
});
检查更新的 JSFiddle 。
答案 1 :(得分:0)
您还可以在数据属性中保留检查值的副本,然后在点击处理程序中进行相应的更新:
$('input[name=test]').click(function(){
var previous = $('input[name=test][data-checked=true]')[0];
console.log(`previous: ${previous.id}`);
console.log(`this: ${this.id}`);
// the button was already checked so nothing needs to happen
if (this.id === previous.id) {
return;
}
// update data-checked: add attribute to the current button, remove for the rest
$(this).attr('data-checked', 'true');
$('input[name=test]:not(:checked)').removeAttr('data-checked');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="test1" type='radio' name='test' value='First' checked data-checked='true'>
<label for="test1">First</label><br>
<input id='test2' type='radio' name='test' value='Second'>
<label for="test2">Second</label><br>
<input id='test3' type='radio' name='test' value='Third'>
<label for="test3">Third</label><br>