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 を使用するため) 。また、.next の代わりに .siblings を使用すると、すべての div が入力 (ラジオとテキスト) と同じ親を持つため、ページ内のボタンを持つすべての div を取得します。最後のラジオの後だけでなく、ラジオグループごとにボタンのdivを取得したい。

より明確にするために、このフィドルを参照してください

ノート:

  • 私は jQuery 1.3 を使用しているため、prop() の代わりに attr() を使用して無効なプロパティを変更します。
  • 私はhtmlコードを変更することはできず、jQueryコードのみを変更することはできないため、html内の何かを変更することは実行できません. さらに、他のテキスト入力と一緒に、さらに多くのラジオ グループがあります (それぞれに保存ボタンがあります)。
  • すべての div に同じ「guardan」ID があるのはエラーであることはわかっていますが、これもコードの方法であり、変更できません。

まとめ。ラジオが変更されたときに、各ラジオ ボタン グループに対応する保存ボタンを有効にする方法が必要です。保存ボタンは常に div 内にラップされ、div は常にラジオまたはテキスト入力の後にあります。jQuery、できれば1.3で動作させる必要がありますが、必要に応じて新しいバージョンに変更できます。

前もって感謝します。

4

2 に答える 2

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 に答える