yii中的jquery:检测radiobutton丢失复选标记(已检查状态)

时间:2014-03-24 15:26:04

标签: javascript jquery html yii

鉴于以下代码(是的,我知道它可能与yii无关,但我添加了标签,所以我用实际生成的html更新问题):

<script>
$(function(){
    $('#widgetId-form input[name="valueType"]').change(function(){
        if ($(this).is(":checked"))
        {
            console.log("habilitando "+$(this).data("class"));
            $("."+$(this).data("class")).prop("disabled", false);
        }
        else
        {
            console.log("deshabilitando "+$(this).data("class"));
            $("."+$(this).data("class")).prop("disabled", true);
        }
    }).change();
});
</script>
<div id="widgetId-dialog">
<form id="widgetId-form" action="/support/test" method="post">
    <div>
        <input id="valueType-single" value="single" data-class="singleValueField" checked="checked" type="radio" name="valueType" />
        <label for="single">Valor simple</label>
        <input size="6" class="singleValueField" type="text" value="" name="singleValue" id="singleValue" />
    </div>
    <div>
        <input id="valueType-range" value="range" data-class="rangeValueField" type="radio" name="valueType" />
        <label for="range">Rango (inicio:fin:intervalo)</label>
        <input size="6" class="rangeValueField" type="text" value="" name="rangeValue_start" id="rangeValue_start" />:<input size="6" class="rangeValueField" type="text" value="" name="rangeValue_end" id="rangeValue_end" />:<input size="6" class="rangeValueField" type="text" value="" name="rangeValue_interval" id="rangeValue_interval" />
    </div>
</form>
</div>

当收音机未选中时,它不会触发change()。这意味着:仅在初始化(.ready())时禁用控件。控件丢失复选标记不会单独触发change()。

问题:如何检测单选按钮何时丢失复选标记?

1 个答案:

答案 0 :(得分:0)

这是一个概念性问题。单选按钮在某种程度上看起来像一个元素。有关详细信息,请查看Why does jQuery .change() not fire on radio buttons deselected as a result of a namesake being selected?
因此,change-event将始终仅触发新选择的元素,而不是取消选择的无线电。你可以修改你的代码:

$(function(){
    $('#widgetId-form input[name="valueType"]').change(function(){
        //could be also hardcoded : 
        $('input[name="' + $(this).attr("name") + '"]').each(function(){
                 if ($(this).is(":checked"))
            {
                console.log("habilitando "+$(this).data("class"));
                $("."+$(this).data("class")).prop("disabled", false);
            }
            else
            {
                console.log("deshabilitando "+$(this).data("class"));
                $("."+$(this).data("class")).prop("disabled", true);
            }
        });
    });

    $('#widgetId-form input[name="valueType"]:first').change();
});

您可以在http://jsfiddle.net/jg6CC/查看。迎接另一个路易斯M.;)