[英]How to remove disabled = "disabled" attribute from input submit field?
[英]Remove disabled attribute onClick of disabled form field
我有一个表单字段,开始禁用,并有一个onClick启用它。 onClick不会触发(至少在FF中)也不会发出简单警报(1);
hacky版本是在它的位置显示一个假的表单字段“看起来”它被禁用(灰色样式)和onClick,隐藏它并显示正确的字段启用,但这很难看。
示例代码
这有效:
<input type="text" id="date_end" value="blah" onClick="this.disabled=true;">
这有效:
<label for="date_end_off" onClick="document.getElementById('date_end').disabled=false">Test</label>
<input type="text" id="date_end" value="blah" onClick="alert(1);" disabled>
这失败了:
<input type="text" id="date_end" value="blah" onClick="alert(1);" disabled>
这失败了:
<input type="text" id="date_end" value="blah" onClick="document.getElementById('date_end').disabled=false" disabled>
我在另一个论坛中遇到过这个帖子,所以我想我将不得不采取另一种方式。
http://www.webdeveloper.com/forum/showthread.php?t=186057
Firefox以及其他浏览器可以禁用已禁用的表单字段上的DOM事件。 从已禁用的表单字段开始的任何事件都将被完全取消,并且不会在DOM树中向上传播。 如果我错了,请纠正我,但如果您单击禁用按钮,则事件源是禁用按钮,并且完全消除了单击事件。 浏览器字面上不知道点击的按钮,也没有通过点击事件。 就像你点击网页上的黑洞一样。
解决方法:
使用readonly
而不是disabled
至少对于复选框,这会使它们看起来已禁用但行为正常(在Google Chrome上测试)。 您必须捕获单击并根据需要阻止事件的默认操作。
使用jQuery,我将事件处理程序附加到输入控件的父级。
<script type="text/javascript">
$(function() {
// disable all the input boxes
$(".input").attr("disabled", true);
// add handler to re-enable input boxes on click
$("td:has(.input)").click(function() {
$(".input", this).removeAttr("disabled");
});
});
</script>
我的所有输入控件都有“输入”类,它们存在于自己的表格单元格中。 如果你至少将输入标签包装在一个div中,那么这应该没有表格。
引用Quirksmode.org :
“禁用表单字段上的单击事件不会触发Firefox和Safari中的事件.Opera会触发mousedown和mouseup事件,但不会触发click事件.IE会在窗体上触发mousedown和mouseup,但不会点击。所有这些实现都是认为是正确的。“
Quirksmode的兼容性表非常适合查找有关此类问题的更多信息。
我最近有一个非常类似的问题,通过将输入放在div中并将onClick移动到div来解决它。
<div onClick="myEnableFunction('date_end');">
<input type="text" id="date_end" value="blah" disabled>
</div>
您可以在禁用的输入上添加div:检查出来
<div onclick="javascript:document.forma.demo1.disabled=false;" style="border:0px solid black; padding:00px;">
<input type=text name="demo1" disabled style="width:30;">
</div>
为了在客户端启用一个禁用的元素,让我们回答选中的复选框或其他东西,我最后不得不使用JS和jQuery的组合,见下文:
//enable the yes & no RB
function enable()
{
var RBNo = "rbnBusinessType";
var RBYes = "rbnBusinessType";
//jQuery approach to remove disabled from containing spans
$("#" + RBYes).parent().removeAttr('disabled');
$("#" + RBNo).parent().removeAttr('disabled');
//enable yes and no RBs
document.getElementById(RBYes).disabled = false;
document.getElementById(RBNo).disabled = false;
}
在回发之后,您需要访问如下所示的请求,以获取客户端启用元素的值:
this._Organization.BusinessTypeHUbZoneSmall = Request.Params [“rbnBusinessTypeHUbZoneSmall”] == rbnBusinessTypeHUbZoneSmallYes.ID;
灵感取自: https : //stackoverflow.com/questions/6995738/asp-javascript-radiobutton-enable-disable-not-included-in-postback-ajax获取更多信息
在点击类上启用禁用元素会失败禁用的目的,你不觉得吗? 如果你真的想要你正在描述的行为,只需将其设置为“禁用”并在点击时删除这些样式。
不要在输入字段的onClick值上实现onClick事件的逻辑。 这可能就是为什么它不适用于Firefox。 而是将函数定义为onClick的值。 例如:
<input type="text" id="date_end" value="blah" onClick="doSomething()" disabled>
<script type="text/javascript">
function doSomething()
{
alert("button pressed");
}
</script>
它也值得研究JQuery。 您可以使用它来添加或删除元素和各种其他内容的属性。 例如,您可以通过编写如下函数从输入字段中删除禁用:
<script type="text/javascript">
function doSomething()
{
alert("button pressed");
$("#date_end").removeAttr('disabled'); //removes the disabled attribut from the
//element whose id is 'date_end'
}
</script>
或者你可以添加如下:
$("#date_end").attr('disabled','true');
Jquery网站就在这里
如果您只是想阻止用户在您的字段中键入数据,而是希望字段populate
事件,我的黑客解决方案是根本不禁用输入字段,而是在运行我的onclick
或onfocus
功能后,调用blur()
以便用户无法编辑该字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.