2

<input type=radio />いずれかが変更されたときに「ラジオグループ」内のすべてを強調表示するコードを書いています。
ラジオの「変更」イベントのイベントハンドラーで、次のコードを使用して、他のすべての同様のラジオを検索します。

radioHandler: function (event) {
    var element = $(this);
    var name = element.attr("name");
    // Find all radios in the same group:
    element.closest("form")
        .find("input[type=radio][name='" + name + "']")
        .each(function(){
            ... etc ...
        });
},

ラジオが実際にフォームに含まれている場合、これは完全に機能します。ただし、フォームの
に ラジオがある場合にも機能させたいと思います。

たとえば、すべての無線が同じを使用すると仮定するとname、以下は3つの異なる無線グループを表します(すべてのブラウザはこのように動作します)。

       o Radio A | o Radio B | o Radio C          (Group - no form)
<form> o Radio D | o Radio E | o Radio F </form>  (Group - form 1)
<form> o Radio G | o Radio H | o Radio I </form>  (Group - form 2)

私が要素を持っている場合、その「グループ」の一部であるラジオだけを見つけるための最良の方法は何ですか?

また、ボーナスポイントの場合...要素が現在のドキュメントの一部ではない場合、つまり、別の「切り離された」コンテキスト内に含まれている場合はどうなりますか?現在のソリューションは正常に機能します(element.closest(...)要素のコンテキストを使用するため)。

4

3 に答える 3

2

フォームで.findを実行する代わりに、ドキュメント全体で実行します。

$("input[type=radio][name='" + name + "']").each(function() {
    ... etc ...
});

私がここで質問を理解していないのでなければ?

編集私は以下のコードをテストしませんでしたが、それはあなたにそれを行う方法についての考えを与えるかもしれません。

radioHandler: function (event) {
    var element = $(this);
    var name = element.attr("name");
    // Find all radios in the same group:
    if (element.parents().find("form").length > 0) {
        name.closest("form").find("input[type=radio][name='" + name + "']")
        .each(function(){
            ... etc ...
        });
    } else {
        $("input[type=radio][name='" + name + "']").each(function() {
            if (!$(this).parents().find("form").length) {
                ... etc ...
            }
        }
    }
}
于 2012-01-21T09:44:08.680 に答える
0

箱の外で考えてください。<input type="radio" />の外側にあるタグに非標準の属性を追加します<form>。例えば:

<input type="radio" outsideform="true" />

次に、次のようなJQueryセレクターを使用します。

$('input[type=radio][outsideform=true]')

CSSクラスでも同様のことができます。クラスは実際にスタイルを実装する必要はありません。

<input type="radio" class="outsideform" />

...と...

$('input[type=radio].outsideform')
于 2012-01-21T10:06:26.133 に答える
0

jquery-ui.jsファイル(私のバージョン1.11.4)を見ると、内部的にこの関数を使用して、同じグループにあるすべてのラジオボタンを取得していることがわかります。

radioGroup = function( radio ) {
 var name = radio.name,
  form = radio.form,
  radios = $( [] );
 if ( name ) {
  name = name.replace( /'/g, "\\'" );
  if ( form ) {
   radios = $( form ).find( "[name='" + name + "'][type=radio]" );
  } else {
   radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
    .filter(function() {
     return !this.form;
    });
  }
 }
 return radios;
};

ボタンタイプが「radio」の場合、ウィジェット(「ui.button」)クリックイベントハンドラー内で使用するため、他のすべてのボタンから「ui-state-active」クラスを削除できます。

于 2016-01-20T04:15:47.557 に答える