1

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

我想要做的是,使用 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 收音机发生更改时才激活保存按钮(因为我使用 .next )。此外,如果我使用 .siblings 而不是 .next,我会在页面中获得所有带有按钮的 div,因为它们都具有与输入(收音机和文本)相同的父级。我想在每个收音机组之后获取按钮的 div,而不仅仅是在最后一个收音机之后。

为了更清楚,请参考this fiddle

笔记:

  • 我正在使用 jQuery 1.3,所以这就是为什么我使用 attr() 而不是 prop() 哟更改 disabled 属性。
  • 我不能更改 html 代码,只能更改 jQuery 代码,因此更改 html 中的任何内容都不可行。另外,还有更多的无线电组,带有其他文本输入的 amog(每个都有一个保存按钮)
  • 我知道每个 div 都具有相同的“guardan”id 是一个错误,但同样,这就是代码的方式,我无法更改它。

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

提前致谢。

4

2 回答 2

2

Use .nextAll() , with a div:first filter, like this:

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

See working fiddle

于 2013-04-19T17:56:59.587 回答
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));
});
于 2013-04-19T18:06:15.733 回答