Javascript 我需要一个事件触发器的单选按钮,当它被取消选中,因为另一个按钮被选中
我需要一个事件触发器的单选按钮,当它被取消选中,因为另一个按钮被选中 下面的代码应该说明我的困境 如果您注意到,html代码中的每个单选按钮和复选框都有一个onchange事件触发器。理论上,如果状态从“已检查”更改为“未检查”,则应触发onchange事件 这与复选框中的预期情况相同。如果您选中一个,则会收到警报“您的项目已更改为选中”。如果取消选中,则会收到警告“您的项目已更改为未选中” 使用单选按钮,当您选中按钮1时,您会像预期的那样收到警报,“您的项目已更改为选中”,因为该按钮已从未选中更改为选中。但是,当您选中第二个按钮且第一个单选按钮从选中更改为未选中时,“onchange”事件触发器不会触发,“else”警报不会触发 对我来说,这个问题是当一个单选按钮被另一个被选中的按钮取消选中时,会触发什么事件 我感谢大家在这方面的帮助 --基诺利Javascript 我需要一个事件触发器的单选按钮,当它被取消选中,因为另一个按钮被选中,javascript,Javascript,我需要一个事件触发器的单选按钮,当它被取消选中,因为另一个按钮被选中 下面的代码应该说明我的困境 如果您注意到,html代码中的每个单选按钮和复选框都有一个onchange事件触发器。理论上,如果状态从“已检查”更改为“未检查”,则应触发onchange事件 这与复选框中的预期情况相同。如果您选中一个,则会收到警报“您的项目已更改为选中”。如果取消选中,则会收到警告“您的项目已更改为未选中” 使用单选按钮,当您选中按钮1时,您会像预期的那样收到警报,“您的项目已更改为选中”,因为该按钮已从未选中
<html>
<head>
<title></title>
<script type="text/javascript">
function clickAction() {
//alert ('Your item changed');
if (this.checked == true) {alert ('Your item is changed to checked');}
else if (this.checked == false) {alert('Your item is changed to unchecked');}
}
</script>
<script type="text/javascript">
function initializeToggles() {
var button1= document.getElementById('button1');
button1.onchange = clickAction;
var box1= document.getElementById('box1');
box1.onchange = clickAction;
var box2= document.getElementById('box2');
box2.onchange = clickAction;
}
</script>
<script type="text/javascript">window.onload = initializeToggles;</script>
</head>
<body>
<input type="radio" name="testRadio" id="button1" >Button one<br/>
<input type="radio" name="testRadio" id="button2" >Button two<br/><br/>
<input type="checkbox" name="testCheckbox" id="box1" >Box one<br/>
<input type="checkbox" name="testCheckbox" id="box2" >Box two<br/><br/>
</body>
</html>
函数clickAction(){
//警报(“您的物品已更改”);
如果(this.checked==true){alert('您的项目已更改为checked');}
else如果(this.checked==false){alert('您的项目更改为unchecked');}
}
函数初始化切换(){
var button1=document.getElementById('button1');
button1.onchange=单击操作;
var box1=document.getElementById('box1');
box1.onchange=单击操作;
var box2=document.getElementById('box2');
box2.onchange=单击操作;
}
window.onload=初始化切换;
按钮一
按钮二
方框一
方框二
单选按钮未选中时,不存在任何事件。您可能可以使用onpropertychange
事件,但这不是一个标准化事件,因此它可能只在Internet Explorer中工作
最安全的方法是在onchange事件中处理这个问题。如果您想知道哪个单选按钮未选中,则必须在变量中保留对当前选中元素的引用。我来这里是为了寻找此类问题的快速解决方案,nuc的回答帮助我得出以下结论:
$(document).ready(function(){
$('input[type=radio]').change(function() {
var selected = $(this);
$('input[type=radio]').each(function() {
if $(this).attr('id') != selected.attr('id') {
console.log( $(this).attr('value') + ' was deselected because ' + selected.attr('value') + ' was clicked.')
}
});
});
});
我稍微修改了rthbound的代码以处理一组无线电输入,在我的例子中,它包含在
中。但是对于
来说,这很容易改变。此外,该代码更符合jQuery 1.9。一个普通的类会更好,从所选的收音机中选取一个类,并找到具有相同类的其他收音机输入,但我正在使用ASP.NET,这对我来说更快、更容易
$(document).ready(function(){
$(document).on("change", "input[type='radio']", function () {
var selected = $(this);
$(this).closest("table").find("input[type='radio']").each(function () {
if ($(this).attr("id") !== selected.attr("id")) {
console.log($(this).attr("value") + " was deselected because " + selected.attr("value") + " was clicked.");
}
});
});
});
我以一种通用的方式解决了这个问题: 每当更改单选按钮时:
$(function(){
$('body').on('change', 'input[type="radio"]', function(e, by_other) {
if (!by_other) {
$("input[type='radio'][name='" + $(this).attr('name') + "']")
.not(this)
.trigger('change', true)
}
}
}
(我确实把它从coffeescript翻译成了javascript供你参考。)单选按钮有相同的名称,因此我们可以按名称选择它们。 因为取消选中收音机时,
.change()
不受影响,所以我们使用.click()
代替
$('input[name="your-radio-name"]').click(function() {
var $radios = $('input[name="your-radio-name"]');
for (var i = 0; i < $radios.length; i++) {
var radio = $radios[i];
if (radio != this) {
radio = $(radio);
// Process for unchecked radios here
}
}
// Now, process for checked radio
// alert(this.value + ' is checked'); Or
alert($(this).val() + ' is checked');
});
$('input[name=“your radio name”]”)。单击(函数(){
var$radios=$('input[name=“your radio name”]”);
对于(变量i=0;i<$radios.length;i++){
var无线电=$无线电[i];
如果(收音机!=这个){
无线电=$(无线电);
//在此处处理未检查的无线电
}
}
//现在,检查无线电的过程
//警报(选中了this.value+);或
警报($(此).val()+'已选中);
});
谢谢。这回答了我的问题。我想我可以创建一个“checked”元素的变量,并遍历它来重置这些元素。现在似乎有了这么多AJAX取消选中单选按钮的“OnOnSet”事件将非常有用。这实际上不适用于多个单选组-您需要检查name属性以确保它们实际上在同一组中。您是对的。。。这需要稍加修改。如果您已经调整了答案以处理多个组,请随意编辑答案。