0

@Grundyによって解決され、投稿の下部に解決策があります

ユーザーがラジオ要素を直接クリックすることなく、要素がプログラムで選択されるラジオオプションを備えたフォームがあります。

var $elem = $("input[name=type][value^=foo_]"); // Select the element with name "type" where the value starts with "foo_" (assume only one value is ever found)
if ($elem.length > 0) // If element is found then toggle the checked value of the radio value
{
    $("input[name=type][checked=checked]").attr("checked", false); // Uncheck all existing checked items
    $elem.attr("checked", true); // Check the found element from before
}

これは機能します。Chrome の開発者ツールで属性が変更されていることがわかります。以前にチェックされた入力はチェックされず、該当する項目がチェックされます。これは毎回機能し、具体的には複数回機能します (後で関連する理由を説明します)。

次に、チェックされていないラジオ ボタンをすべて非表示にし、チェックされているラジオ ボタンのみを表示します。

$("input[name=type] + label").hide();
$("input[name=type]:checked + label").show();

これは、入力が初めて選択されたときに機能します。チェックされていない入力はすべて非表示になり、チェックされている入力は非表示になります。入力が 2 回目に選択された場合 (すぐにもう一度、または間に他のオプションが選択された後)、チェックされたものを含むすべての入力が非表示になります。

一致した要素の数を確認すると、最初$("input[name=type]:checked + label")に返され、2 回目は 2 回目以降は選択されません。その時点で属性が動的に変更されたためだと思いますが、それが問題の原因ではない可能性があります。10checked

編集 - ここにフィドル フィドルがあります。灰色のボックスをクリックすると、ユーザーが値をクリックして変更したときの通常の動作が表示されます。各値は任意の順序で複数回選択できますが、下部のテキスト (見栄えの悪いボタン) をクリックすると、プログラムによってフォームが変更されます。初めて機能するだけで、ユーザーが以前に選択したかどうかは気にしないようです。

解決策 - クレジット @Grundy$elem以前に見つけたオブジェクトが変更されているオブジェクトであることが わかっているので、checked属性を持つ要素を検索する代わりに直接参照できます。だから私はこれを使用します:

var $elem = $("input[name=type][value^=foo_]"); // Created before all the changes
$elem.next("label").show(); // Referenced after all the changes

これを使用する代わりに:

$("input[name=type]:checked + label").show(); // Referenced after all the changes
4

1 に答える 1

1

使ってみて

$elem.next("label").show();

それ以外の

$("input[name=type]:checked + label").show();

$elemあなたが見つけたチェックボックスがチェックされているので

于 2013-10-17T06:36:04.653 に答える