1

OK -この質問に従ってラジオボタンを動的に追加するために呼び出す関数があります。これは完全な機能です:

    // function used to create a new radio button
    function createNewRadioButton(
            selector,
            newRadioBtnId,
            newRadioBtnName,
            newRadioBtnText){

        // create a new radio button using supplied parameters
        var newRadioBtn = $('<input />').attr({
            type: "radio", id: newRadioBtnId, name: newRadioBtnName
        });

        // create a new label and append the new radio button
        var newLabel = $('<label />').append(newRadioBtn).append(newRadioBtnText);

        // add the new radio button and refresh the buttonset
        $(selector).append(newLabel).append('<br />').buttonset("refresh");
    }

したがって、次のコードで上記の関数を呼び出すと、div '#radioX' に既に含まれているラジオ ボタンの下に別のラジオ ボタンが追加されることが予想されます (ラジオ ボタンを含む id radioX の div があると仮定します)。

            // create a new radio button using the info returned from server
            createNewRadioButton(
                    '#radioX', // Radio button div id
                    product.Id, // Id
                    product.Id, // Name
                    product.Name // Label Text
            );

$( "#radioX" ).buttonset();ドキュメントの準備が整ったら、次のように#radioX に含まれるラジオ ボタンからボタンセットを作成するよう jQuery に指示し$("#radioX").buttonset("refresh")ます。

createNewRadioButton への呼び出しが行われた後に表示される結果は、目的のテキストが追加された新しいラベルが追加されていますが、新しいラジオ ボタンはありません。そのため、既にあるものの下に素敵な新しい jQuery ラジオ ボタンが表示される代わりに、product.Name と同等のテキストを含む新しいラベルが表示されます (この例では)。

createNewRadioButton への呼び出しが行われた後、firebug にこの警告出力が表示されることにも気付きました。

reference to undefined property $(this).button("widget")[0]

編集

これが私が予想したことのスクリーンショットです:

これが何が起こるかのスクリーンショットです

4

2 に答える 2

1

私の間違い。実際、refreshメソッドは実行時に追加された無線要素を適切に処理しています。

生成しているマークアップはcreateNewRadioButton()、プラグインが期待するものと互換性がないと思います。

以下を作成します。

<label><input /></label>

そして、プラグインは以下を期待しています:

<input /><label for=''></label>


変更された関数は次のとおりです。

function createNewRadioButton(
        selector,
        newRadioBtnId,
        newRadioBtnName,
        newRadioBtnText){

    // create a new radio button using supplied parameters
    var newRadioBtn = $('<input />').attr({
        type: "radio", id: newRadioBtnId, name: newRadioBtnName
    });

    // create a new label and append the new radio button
    var newLabel = $('<label />').attr('for', newRadioBtnId).text(newRadioBtnText);

    // add the input then the label (and forget about the <br/>
    $(selector).append(newRadioBtn).append(newLabel).buttonset("refresh");
}


コンテナー「#radioX」が空であっても、プラグインを初期化する ことを忘れないでください。

$('#radioX').buttonset();


実際の例を確認できるように、jsfiddleを作成しました。

于 2011-11-28T11:01:23.050 に答える