改进单选按钮的使用以启用/禁用表单字段

时间:2011-05-17 20:22:30

标签: javascript jquery forms radio-button

我有两个单选按钮和两个相应的表单字段。根据选择的单选按钮,一个表单字段被禁用,另一个表单字段被启用。

我的代码有效,但我认为可以改进。现在我有两个独立的过程。一个人检查页面加载时是否选择了哪个单选按钮,并禁用相应的字段。另一个响应页面加载后用户的更改。我相信它可以简化,但我不知道如何。

$(document).ready(function() {
  if ($("#element_link_link_type_internal").is(':checked')) {
    $("#element_link_url").attr("disabled","disabled");
  } else {
    $("#element_link_page_id").attr("disabled","disabled");
  }
});

$(document).ready(function() {
  $("#element_link_link_type_internal").click(function(){
  $("#element_link_page_id").attr("disabled","");
  $("#element_link_url").attr("disabled","disabled");
  }),
  $("#element_link_link_type_external").click(function(){
  $("#element_link_page_id").attr("disabled","disabled");
  $("#element_link_url").attr("disabled","");
  });
});

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以在onchange处理程序中测试已检查状态,并在页面加载时调用onchange处理程序(我相信您应该使用而不是onclick):

$(document).ready(function() {
    $("#element_link_link_type_internal").change(function() {
        $("#element_link_page_id").attr("disabled", !this.checked);
        $("#element_link_url").attr("disabled", this.checked);
    }).change(); // invoke once to set up initial state
});

答案 1 :(得分:1)

这是未经测试的,并且基于您的评论/答案:

jQuery< 1.6:

$(document).ready(function() {

    var $type = $('input[name="element_link[link_type]"]'),
        $pageId = $("#element_link_page_id"),
        $url = $("#element_link_url");

    $type.change(function() {

        if ($type.filter(":checked").val() === "internal") {

            $pageId.removeAttr("disabled");
            $url.attr("disabled", "disabled");

        } else {

            $url.removeAttr("disabled");
            $pageId.attr("disabled", "disabled");            

        }

    }).change();

});

jQuery> = 1.6

$(document).ready(function() {

    var $type = $('input[name="element_link[link_type]"]'),
        $pageId = $("#element_link_page_id"),
        $url = $("#element_link_url");

    $type.change(function() {

        var isDisabled = ($type.filter(":checked").val() === "internal");

        $pageId.prop("disabled", !isDisabled);
        $url.prop("disabled", isDisabled);

    }).change();

});

答案 2 :(得分:0)

@ karim79,你的回答让我开始但是当第二个单选按钮被选中时它没有用。它仅在选择第一个单选按钮时有效。

我想出了这个,似乎就是这个伎俩。我欢迎任何人提供额外的改进。 JavaScript让我大吃一惊。

$(document).ready(function() {
$("input[name='element_link[link_type]']").change(function() {
    var v = $("input[name='element_link[link_type]']:checked").val()
    $("#element_link_page_id").attr("disabled", v == 'internal' ? "" : "disabled");
    $("#element_link_url").attr("disabled", v == 'internal' ? "disabled" : "" );
}).change(); // invoke once to set up initial state
});