1

jQuery UIダイアログポップアップでチェックされたラジオボタンを覚えておきたいという問題があります。

奇妙な動作に遭遇したので、JSFiddle でモックアップしました。フィドルは基本的に、作成時に 3 つのラジオの選択肢のいずれかをランダムに選択します。しかし、すぐに機能しなくなります。

removeAttr('checked') を行う行の有無にかかわらず試しました。

ダイアログが機能しなくなるのを確認するには、[開く] ダイアログをクリックして数回閉じる必要があります。Chrome の最新バージョンでこれをテストしています。

http://jsfiddle.net/t8kN7/5/

HTML

<div id="dialog" style="display:none;">

<input type="radio" class="left" name="rentFrequency" value="1" />
<span class="left">&#160;Monthly&#160;&#160;&#160;</span>

<input type="radio" class="left" name="rentFrequency" value="2" />
<span class="left">&#160;Quarterly&#160;&#160;&#160;</span>

<input type="radio" class="left" name="rentFrequency" value="3" />
<span class="left">&#160;Annualy&#160;&#160;&#160;</span>                                

</div>

<input type="button" name="dialogOpen" value="Open Dialog" />
<input type="text" name="randVal" value="" readonly="readonly" />

Javascript

$(document).ready(function() {

$('input[name="dialogOpen"]').click(function(){
    $("#dialog").dialog({
        title: 'Additional Tenancy Information',
        resizable: false,
        width: 530,
        show: { effect:'fade', duration:500 },
        hide: { effect:'fade', duration:400},           
        modal: true,
        close: function (event, ui) {
        },
        open: function (event, ui) {
            var randval=Math.floor(Math.random()*3)+1
            console.log(randval); 
            $('input[name="randVal"]').val(randval);
            $('input[name="rentFrequency"]').removeAttr('checked');
            $('input[name="rentFrequency"][value="'+randval+'"]').attr('checked', 'checked');
        }
    });
});
});

これは、ダイアログ ポップアップがないだけで実質的に同じコードであり、期待どおりに動作します。

http://jsfiddle.net/W6rFh/1/

RUNをクリックし続けるだけ

4

2 に答える 2

4

私のコメントをフォローアップします。attr インスタンスを prop に変更

$('input[name="randVal"]').val(randval);
$('input[name="rentFrequency"]').prop("checked", false);
$('input[name="rentFrequency"][value="'+randval+'"]').prop("checked", true);
于 2013-03-11T15:37:08.970 に答える
1

ダイアログは一度だけ作成してください。

autoOpenこの場合、プロパティを に設定してダイアログをすぐに作成することをお勧めしますfalse

クリック ハンドラーでは、次のように呼び出すことができます。

$('#dialog').dialog('open');

その時点で、閉じたときと同じ状態になります。

明らかに、open:ハンドラーでランダム状態を設定するコードも削除する必要があります。

于 2013-03-11T15:22:03.290 に答える