情景是: 我的网页中有一个复选框和一个按钮,当我们手动检查复选框按钮是否启用时,但是当我使用jquery自动执行此过程时,选中复选框后按钮没有启用:
以下是我自动化的步骤:
在我用于检查复选框的jquery下面:
$("#id").attr( "checked", "checked" )
在HTML中: 复选框:
<input id="preaccountconfirm" class="scp-input-check" type="checkbox" value="1" name="preaccountconfirm" tabindex="20">
按钮:
<button id="button-next" type="button" disabled="" class="scp-button-next scp-disabled" tabindex="1000">Next</button>
答案 0 :(得分:0)
checked
(以及disabled
就此而言)是一个属性用.prop
以编程方式检查元素 -
$("#id").prop( "checked", true)
在HTML术语中,您的代码会产生类似这样的内容 -
<input type="radio" checked />
我怀疑你期待这个 -
<input type="radio" checked="checked" />
使用$("#id").attr("checked", "checked")
和$("#id").attr( "checked","")
会产生相同的HTML -
<input type="radio" checked />
因此在checked
语句中使用.attr
实际上对元素没有影响。使用$("#id").prop( "checked", false)
实际上会从元素中删除属性 -
<input type="radio" />
以下是我认为是您的基本结构的工作版本(虽然我正在禁用select
而不是button
)。处理事件(在我的情况下为change
)时,如果以编程方式执行此操作,则需要手动触发事件 -
$("#rad").change(function() {
if ($(this).prop("checked"))
$("#sal").prop("disabled", false);
else
$("#sal").prop("disabled", true);
});
$("#setChecked").click(function() {
if($("#rad").prop("checked"))
$("#rad").prop("checked", false);
else
$("#rad").prop("checked", true);
$("#rad").trigger("change");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="rad" type="checkbox">
<select id="sal" disabled>
<option>1</option>
<option>2</option>
</select>
<button id="setChecked">Click</button>
答案 1 :(得分:0)
哪个版本的jQuery正在使用?如果你使用1.6以上的任何东西,prop()是使用jQuery更改元素属性的正确方法。在此处的文档中了解有关它的更多信息:http://api.jquery.com/prop/
$("#id").prop('checked', true);
http://jsfiddle.net/fatgamer85/0bhfLbdv/
如上面小提琴中所示的例子,使用.prop()作为john提到,这应该可以解决你的问题。