我有一个包含多组单选按钮和几个输入文本的表单,在每组之后,无论是收音机还是文本,都有一个按钮来保存每个组的更改。
我想要做的是,使用jQuery,为onchange事件添加一个处理程序,这样就可以启用每组无线电(和文本)的下一个按钮。
html是这样的:
Antig.<input type="text" name="anosAntiguedad" id="anosAntiguedad" >
<div id='guardan' style="display:<?= $mostrar?>">
<input type="button" value="Guardar" onclick="modifica('anosAntiguedad')" />
</div>
<input type="radio" name="viveCasa" id="viveCasa" value="Propia" >Propia
<input type="radio" name="viveCasa" id="viveCasa" value="Rentada" >Rentada
<input type="radio" name="viveCasa" id="viveCasa" value="Familiares" >Familiares
<div id='guardan' >
<input type="button" value="Guardar" onclick="modifica('viveCasa')" />
</div>
我已经对输入文本有了所需的行为,并且我已经使用jQuery在每个文本的更改上激活了相应的保存按钮。像这样:
$('input:text')
.bind('change ',function(){
$(this).next("div").children(":button")
.attr("disabled",false);
});
但是如果我使用初始的$(“:radio”)选择器做类似的事情,它就不会按预期工作,因为如果组中的LAST无线电被更改(因为我使用它)它只会激活保存按钮。下一个 ) 。此外,如果我使用.siblings而不是.next,我会在页面中获得带有按钮的所有div,因为它们都具有与输入相同的父级(无线电和文本)。我想在每个无线电组之后获得按钮的div,而不是在最后一个无线电之后。
为了更加清晰,请参阅this fiddle
注意:
结束。当收音机发生变化时,我需要一种方法为每个单选按钮组启用相应的保存按钮。保存按钮始终包含在div中,div总是在收音机或文本输入之后。我需要它在jQuery中工作,最好是1.3,但如果需要,我可以将它改成更新的版本。
提前致谢。
答案 0 :(得分:2)
使用.nextAll()
和div:first
过滤器,如下所示:
$('input:radio')
.bind('change ',function(){
$(this).nextAll("div:first").children(":button")
.attr("disabled",false);
});
答案 1 :(得分:0)
这可以优化,但是:
$(":radio").change(function(){
var nextButton = function($but) {
if ($but.next().is('DIV')) {
$but.next().find(":button").attr("disabled",false);
} else {
nextButton($but.next());
}
}
nextButton($(this));
});