jQuery,如何在几个单选按钮后选择立即下一个div?

时间:2013-04-19 17:49:30

标签: jquery jquery-selectors

我有一个包含多组单选按钮和几个输入文本的表单,在每组之后,无论是收音机还是文本,都有一个按钮来保存每个组的更改。

我想要做的是,使用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

注意:

  • 我正在使用jQuery 1.3,这就是为什么我使用attr()而不是prop()哟 更改已禁用的财产。
  • 我无法更改html代码,只能更改jQuery代码 HTML中的任何内容都不可行。此外,还有更多的无线电组,与其他文本输入(每个都有一个保存按钮)相混淆。
  • 我知道每个div都有相同的“护卫”ID是错误的, 但同样,这就是代码的方式,我无法改变它。

结束。当收音机发生变化时,我需要一种方法为每个单选按钮组启用相应的保存按钮。保存按钮始终包含在div中,div总是在收音机或文本输入之后。我需要它在jQuery中工作,最好是1.3,但如果需要,我可以将它改成更新的版本。

提前致谢。

2 个答案:

答案 0 :(得分:2)

使用.nextAll()div:first过滤器,如下所示:

   $('input:radio')
        .bind('change ',function(){ 
            $(this).nextAll("div:first").children(":button")
                .attr("disabled",false);        
    });

请参阅working fiddle

答案 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));
});