2014-11-22 66 views
0

我需要拒绝更改任何复选框的状态的状态:拒绝改变复选框

window.doNotChange = function(event) { 
 
    e = event || window.event; 
 
    if (e) { 
 
    e.stopPropagation(); 
 
    e.preventDefault(); 
 
    var t = $(e.target); 
 
    t.prop({checked: typeof t.attr('checked') != 'undefined'}); 
 
    } 
 
    alert('Deny to change THIS checkbox!'); 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p><label><input type="checkbox" checked onchange="doNotChange(event)"> name 1 (readonly)</label></p> 
 
<p><label><input type="checkbox" onchange="doNotChange(event)"> name 2 (readonly)</label></p> 
 
<p><label><input type="checkbox" checked> name 3 (editable)</label></p> 
 
<p><label><input type="checkbox" checked onchange="doNotChange(event)"> name 4 (readonly)</label></p> 
 
<p><label><input type="checkbox"> name 5 (editable)</label></p> 
 
<p>etc.</p>

此代码的工作。但有没有更好的解决方案?

+0

我不好意思这段代码:t.prop({检查:typeof运算t.attr( '检查')= '不确定'}); – 2014-11-22 17:23:28

+0

是的。我也是。无法理解逻辑。 – 2014-11-22 17:25:44

+0

任何复选框,我添加onchange事件,必须是只读的。并点击它们必须是一个警报。 – 2014-11-22 20:49:18

回答

3

只要使用HTML的disabled属性:

<input type="checkbox" disabled />

+0

为什么不只读? – 2014-11-22 17:24:49

+0

因为'readonly'只能防止对''的*'value' *进行修改,所以它不会阻止* state *('checked'或不)的修改。可悲的是。请参阅这里的问答:http://stackoverflow.com/questions/155291/can-html-checkboxes-be-set-to-readonly – 2014-11-22 17:26:15

+0

我可能会错误地设置任务。我需要点击复选框显示一条消息。而残疾人不适合我。 – 2014-11-22 21:49:35

0

怎么样只是简单的禁止那些你不wan't上进行更改:

document.getElementById("your_field_id").disabled = true; 
+0

“禁用”属性不适合我。我首先做到了 – 2014-11-22 21:52:23

0

现在,我只能看到一个解决方案:将元素和默认值传递给函数

window.doNotChange=function(el,v){ 
 
\t $(el).prop({checked:v}); 
 
\t alert('Can\'t touch this'); 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p><label><input type="checkbox" checked onchange="doNotChange(this,1)"> name 1 (readonly)</label></p> 
 
<p><label><input type="checkbox" onchange="doNotChange(this,0)"> name 2 (readonly)</label></p> 
 
<p><label><input type="checkbox" checked> name 3 (editable)</label></p> 
 
<p><label><input type="checkbox" checked onchange="doNotChange(this,1)"> name 4 (readonly)</label></p> 
 
<p><label><input type="checkbox"> name 5 (editable)</label></p>

感谢答案