2010-05-26 53 views
0

我需要创建一个表单元素使用Javascript - 文本输入属性

<输入禁用类型= “文本” 值= “水木清华”/ >

这是禁用默认为。它使得发生在发生在发生。

onmouseover =“this.disabled = false;”

而由禁用的onmouseout

的onmouseout = “this.disabled = TRUE;”


我需要做的是检查以下内容。 如果<输入>被关注,那么它不应该被禁用。

如果表单元素失去焦点,则禁用它。

请帮我完成这些事件。

< input disabled type =“text”value =“水母清华”onmouseover =“this.disabled = false;”的onfocus = “??? ”的onblur =“ ??? ”的onmouseout =“ 如果(???){this.disabled = TRUE;}”/ >

+4

这听起来像一个非常奇怪的用户体验,如果你不介意我的话。首先,这意味着您完全禁用键盘访问该字段。我们的键盘类型不会那么喜欢,可访问性软件也可能会遇到这种情况。 – 2010-05-26 13:09:53

+0

你能告诉我们更多关于你为什么要这样的行为吗? – 2010-05-26 13:13:46

+0

我同意T.J.对此,我很少在网页上触摸我的鼠标。 – CharlesLeaf 2010-05-26 13:14:07

回答

4

这是行不通的,因为onmouseover在大多数浏览器中不会禁用禁用输入。 (Opera是一个例外,IE通常不会,除非你用拖动操作来欺骗它。)

在任何情况下,它听起来都像是一个非常奇怪和用户不友好的诡计。 为什么选择要禁用它吗?如果它在尝试与之交互时变为非禁用状态,那么它似乎没有任何意义(但存在大量的可访问性缺陷)。

如果它只是一个造型的东西,然后使用样式:

<style type="text/css"> 
    .weirdinput { color: silver; } 
    .weirdinput:hover, .weirdinput:focus { color: black; } 
</style> 

<input class="weirdinput" value="smth" /> 

然而,IE < 8不支持:focus,和IE < 7不支持非链接:hover,因此,如果您需要它的工作,你将不得不添加一些脚本,例如。例如:

<style type="text/css"> 
    .weirdinput { color: silver; } 
    .weirdinput:hover, .weirdinput:focus, .weirdhover, .weirdfocus { color: black; } 
</style> 

<input class="weirdinput" value="smth" /> 

<!--[if lt IE 8]><script type="text/javascript">(function() { 

    // Fix focus/hover for IE on all inputs with class 'weirdinput' 
    // 
    var inputs= document.getElementsByTagName('input'); 
    for (var i= 0; i<inputs.length; i++) { 
     var input= inputs[i]; 
     if (input.className.indexOf('weirdinput')!==-1) { 
      input.onmouseover= mouseover; 
      input.onmouseout= mouseout; 
      input.onfocus= focus; 
      input.onblur= blur; 
     } 
    } 

    function mouseover() { 
     this.className+= ' weirdhover'; 
    } 
    function mouseout() { 
     this.className= this.className.replace(' weirdhover', ''); 
    } 
    function focus() { 
     this.className+= ' weirdfocus'; 
    } 
    function blur() { 
     this.className= this.className.replace(' weirdfocus', ''); 
    } 

})();</script><![endif]--> 
0

你可以做的是,

  1. on focus将变量设置为true;
  2. on blur将该变量设置为false;并禁用true
  3. 如果onmouseover设置为true,则将其设置为false
  4. onmouseout set disabled仅当变量为false时; (所以不集中)
0

我认为你将有一个很大的麻烦此行为,因为无效字段将不会收到mouseover(或mouseenter,如果你的浏览器支持的话)事件。我甚至试图在它下面的元素上捕获事件,但禁用的字段会将其消除。

+0

它不?我不知道,每天都要学习新的东西。也许他可以使用readonly而不是禁用,如果他真的想要这种功能.. – CharlesLeaf 2010-05-26 13:22:42

+0

@CharlesLeaf:我也没有。 :-)我很好奇,试了一下。 – 2010-05-26 13:30:40

0

禁用的字段未提交,不在关键的选项卡节点列表中,也不会收听或传递事件。您禁用一个输入,以便用户不能更改其值。

没有领域可以改变没有得到重点。

您只能通过脚本更改禁用属性,脚本可能来自页面上其他位置的事件。

但是没有名字,就像在你的例子中那样,字段的值在任何情况下都不会以其形式被提交,那么这个字段被禁用或者没有被关闭会怎么样呢?

如果您的意图是禁用该字段,如果javascript是而不是启用,为什么不用css隐藏它并用脚本样式显示它?

相关问题