如何防止用户在不禁用字段的情况下键入文本字段?

Jac*_*cob 69 html javascript jquery

我试过了:

$('input').keyup(function() {

   $(this).attr('val', '');

});
Run Code Online (Sandbox Code Playgroud)

但输入一个字母后会略微删除输入的文字.反正是否有阻止用户完全输入文本而不诉诸于禁用文本字段?

Mik*_*ock 152

一个非常容易被忽视的Javascript替代方法:您可以使用readonly属性而不是disabled属性吗?它可以防止在输入中编辑文本,但是浏览器会以不同的方式设置输入的样式(不太可能"灰掉它"),例如<input readonly type="text" ...>

  • 这种方法有一个缺点.用户仍然可以点击该字段,使其看起来好像是可编辑的.如果他们按下退格键以移除其中的内容,则可能会触发浏览器的"后退"功能.不是一个很好的经历. (4认同)
  • 老实说,我认为这是最好的解决方案. (3认同)
  • readonly属性没有值,它只需要出现在[HTML 4.01](http://www.w3.org/TR/html401/interact/forms.html#adef-readonly)和[HTML5]中(http://www.w3.org/TR/html5/common-input-element-attributes.html#the-readonly-attribute).它需要一个值的唯一时间是有效的XHTML文档(在Web上非常罕见). (3认同)

Art*_*Art 58

如果你不希望该字段看起来"禁用"或smth,只需使用:

onkeydown="return false;"
Run Code Online (Sandbox Code Playgroud)

它与greengit和Derek说的基本相同,但稍微短一些

  • 请注意,这不会阻止用户使用鼠标粘贴文本. (4认同)
  • 甚至更短:`onkeydown ="return false"` (3认同)
  • 例如,当使用日期选择器时,这是完美的,以防止用户键入日期并实际使用日期选择器.但正如@gsanta所说,他们仍然可以粘贴文本,所以只需确保后端验证以及:) (2认同)

tre*_*der 30

$('input').keydown(function(e) {
   e.preventDefault();
   return false;
});
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我有一个出生日期字段,我想阻止用户输入,所以对我来说你的答案是好的!如果我使用"readonly"属性,那么用户将无法点击输入和DOB弹出来通过点击输入.. :) CHEERS !!!! 谢谢 (2认同)

Der*_*ker 16

$('input').keypress(function(e) {
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

  • 这只会阻止输入,而您仍可以使用箭头键等。谢谢! (2认同)

Mys*_*cal 8

如果您想阻止用户添加任何内容,但要为他们提供擦除字符的能力:

<input value="CAN'T ADD TO THIS" maxlength="0" />
Run Code Online (Sandbox Code Playgroud)

maxlength输入的属性设置为"0"使用户无法添加内容,但仍可以根据需要删除内容


但是,如果您希望它真正保持不变且不可更改:

<input value="THIS IS READONLY" onkeydown="return false" />
Run Code Online (Sandbox Code Playgroud)

onkeydown属性设置为return false使输入忽略用户keypresses从而防止他们更改或影响值。