【问题标题】:JQuery - Set Attribute valueJQuery - 设置属性值
【发布时间】:2010-01-05 22:29:50
【问题描述】:

我有两个具有相同名称的元素的 HTML

<input type="hidden" name= "chk0" value="">
<input type="checkbox" name="chk0" value="true" disabled>

通过 JQuery,我想设置启用复选框。所以,我正在使用这样的东西:

$('#chk0').attr("disabled",false);

但这不起作用。我假设 JQuery 对具有相同名称的两个元素感到困惑。不幸的是,我无法避免使用两个不同的名称,因为在发布表单时,我希望发布所有复选框(不仅仅是选中的复选框)。因此,我必须使用具有相同名称的隐藏元素。所以,回到问题,如何在上述场景中通过 JQuery 启用复选框?是否存在与复选框隐藏的 attr 的“类型”参数?

谢谢

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    实际代码之前的一些事情..

    您用作选择器的散列 (#) 用于 ID 而不是元素名称。 禁用属性也不是真假场景..如果它具有禁用属性,则表示它为真..您需要删除该属性而不是将其设置为假。 还有一些表单选择器可以识别表单中特定类型的项目..

    所以代码是

    $("input:checkbox[name='chk0']").removeAttr('disabled');
    

    更新答案

    您应该使用.prop() 方法(从 v1.6 开始添加

    $("input:checkbox[name='chk0']").prop('disabled', false); // to enable the checkbox
    

    $("input:checkbox[name='chk0']").prop('disabled', true); // to disable the checkbox
    

    【讨论】:

    • 这很好用...如果我必须启用复选框,那么它将是 $("input:checkbox[name='chk0']").attr('disabled',false) ;
    • 好吧.. 如w3schools.com/tags/att_input_disabled.asp 所示,要放置的官方值将再次被禁用,因此 $("input:checkbox[name='chk0']").attr('disabled', '禁用');
    • jQuery 是一种疯狂的方式来做到这一点。比将复选框的 disabled 属性设置为 false 能简单多少?
    • 其实它一个真正的错误场景。 jQuery 的 attr 方法设置 JS 属性 not HTML 属性(除了一些极端情况的解决方法;它确实将 HTML 属性名称转换为 JS 属性名称,但这并不意味着它正在使用属性访问)。 attr('disabled', 'disabled') 仅有效,因为字符串 'disabled' 是真实的;当您将其分配给布尔属性disabled 时,它的作用类似于true。但'banana' 和任何其他非空字符串也是如此。
    • @Hogan - 那时不要使用它。 $("input:checkbox[name='chk0']")[0].disabled = false; 更好(更快、更清晰、更简单、更有效)。 @gaby - 在这里处理属性是不必要且不可取的,因为它几乎在浏览器脚本中。我建议不要使用 jQuery 的 attr() 和相关方法,因为正如 @bobince 指出的那样,名称具有误导性并且实现令人困惑。没有什么能阻止您将 DOM 调用与 jQuery 混合使用:请参阅本评论前面的示例。
    【解决方案2】:

    说真的,只是不要为此使用 jQuery。 disabled 是表单元素的布尔属性,自 1997 年以来在所有主流浏览器中都能完美运行,并且无法更简单或更直观地更改表单元素是否被禁用。

    获取复选框引用的最简单方法是给它一个id。这是我建议的 HTML:

    <input type="hidden" name="chk0" value="">
    <input type="checkbox" name="chk0" id="chk0_checkbox" value="true" disabled>
    

    以及使复选框启用的 JavaScript 行:

    document.getElementById("chk0_checkbox").disabled = false;
    

    如果您愿意,也可以使用 jQuery 来获取复选框:

    $("#chk0_checkbox")[0].disabled = false;
    

    【讨论】:

    • +1 使用 jQuery 做它的好处,不要盲目地到处应用它。
    • 仅仅为了选择正确的元素而使用 jquery 有错吗?就像你给两个元素相同的 id,但将它们嵌套在具有不同 id 的其他元素中一样,所以你可以用 $(#parent1 #child) 选择一个,用 $(#parent2 #child) 选择另一个?跨度>
    • @BCarpe:两个元素具有相同的id 是无效的,应该避免。但是,使用 jQuery 一次设置多个元素的属性是合理的。我建议在 jQuery 1.6 中使用 $("whatever").prop("disabled", false)
    【解决方案3】:

    “True”和“False”不起作用,要禁用,设置为禁用值。

    $('.someElement').attr('disabled', 'disabled');

    要启用,请删除。

    $('.someElement').removeAttr('disabled');

    另外,不要担心选择了多个项目,jQuery 将对所有匹配的项目进行操作。如果你只需要一个,你可以使用很多东西:first、:last、nth 等。

    您使用的是 name 而不是 id 作为其他提及 -- 请记住,如果您使用 id 有效 xhtml 要求 id 是唯一的。

    【讨论】:

    • attr 没有做你认为的事情。
    【解决方案4】:

    $("#chk0") 指的是 id 为 chk0 的元素。您可以尝试将 id 添加到元素中。即使名称相同,ID 也是唯一的,因此在 jQuery 中,您可以通过其 id 访问单个元素。

    【讨论】:

    • +1 这比非标准的:checkbox 选择器更简单并且速度更快(强制 jQuery 使用慢速 Sizzle 选择器引擎而不是浏览器的快速 querySelectorAll 方法)。跨度>
    【解决方案5】:

    使用 ID 来唯一标识复选框。您当前的示例正在尝试选择 id 为“#chk0”的复选框:

    &lt;input type="checkbox" id="chk0" name="chk0" value="true" disabled&gt;

    $('#chk0').attr("disabled", "disabled");

    您还需要删除disabled 的属性才能启用该复选框。比如:

    $('#chk0').removeAttr("disabled");

    请参阅removeAttr 的文档

    用于禁用/启用输入元素的 XHTML 值如下:

    <input type="checkbox" id="chk0" name="chk0" value="true" disabled="disabled" />
    <input type="checkbox" id="chk0" name="chk0" value="true" />
    

    请注意,使输入元素启用的是 disabled 属性的 absence

    【讨论】:

    • 对同一文档中的两个不同元素使用相同的 id 是无效的 HTML。
    【解决方案6】:

    你可以添加不同的类来选择,或者像这样按类型选择:

    $('input[type="checkbox"]').removeAttr("disabled");

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2018-04-18
      相关资源
      最近更新 更多