Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery的复选框_Javascript_Jquery - Fatal编程技术网

Javascript 使用jQuery的复选框

Javascript 使用jQuery的复选框,javascript,jquery,Javascript,Jquery,以下是一些html: <form> <input type="checkbox" id="check-123" /> <input type="text" id="text-123" onchange="doSomething('123')" /> </form> 我的目标是在文本框中有值时选中复选框,并在删除该值时取消选中。这在html中似乎可以正常工作(我可以看到复选框中添加了checked=“checked”),但复选框仅在

以下是一些html:

<form>
    <input type="checkbox" id="check-123" />
    <input type="text" id="text-123" onchange="doSomething('123')" />
</form>
我的目标是在文本框中有值时选中复选框,并在删除该值时取消选中。这在html中似乎可以正常工作(我可以看到复选框中添加了
checked=“checked”
),但复选框仅在首次在文本框中输入内容时才显示为选中


为什么即使html中添加了
checked=“checked”
,复选框也会显示unchecked?

使用元素属性而不是属性来通过javascript更改其状态

checkbox.prop('checked',(textbox.val()!="") );
从和上的jQuery文档:

从jQuery1.6开始,.attr()方法为尚未设置的属性返回undefined要检索和更改DOM属性,如表单元素的选中、选中或禁用状态,请使用.prop()方法。


重点是jQuery自己的。只有选中的属性将反映和控制复选框的当前状态。checked属性不应用于控制复选框状态。

我在IE8及更低版本中看到了checked属性的一些有趣之处。在某些情况下,我必须同时设置属性和属性,即使现代浏览器似乎只需要调整属性即可:

checkbox.prop('checked',textbox.val()!="");//property
注意,只有在遇到任何与浏览器相关的不一致时,才需要执行以下操作

if(textbox.val()!="") 
{
    checkbox.attr('checked','checked');
}
else
{
    checkbox.removeAttr('checked');
}

考虑以下情况:

function doSomething(el) {
    el.form['check-' + el.name.split('-')[1]].checked = !!el.value;
}


<form>
    <input type="checkbox" name="check-123">
    <input type="text" name="text-123" onchange="doSomething(this)">
</form>
功能剂量仪(el){
el.form['check-'+el.name.split('-')[1]]。checked=!!el.value;
}

prop
每个jQuery api只接受一个参数。你是说别的吗?@sircapsalot
getter
只接受1个参数,但是
setter
接受2个参数替换
。attr
。prop
修复了这个问题,现在我知道了prop实际上应该用于什么。谢谢如果侦听器调用“someFunction”,为什么要提供一个名为“doSomething”的函数因为我喜欢让人们保持警觉=DJust设置属性,IE中的属性混乱,行为在浏览器中不一致。@RobG-我同意这应该是默认设置。我补充了一个更清楚的解释
function doSomething(el) {
    el.form['check-' + el.name.split('-')[1]].checked = !!el.value;
}


<form>
    <input type="checkbox" name="check-123">
    <input type="text" name="text-123" onchange="doSomething(this)">
</form>