如何编写允许不可编辑文本框的JavaScript函数?

时间:2011-08-09 14:36:46

标签: javascript jquery jquery-plugins javascript-events

我需要一个输入文本框,我可以在其中单击并且光标开始闪烁,但用户无法更改其中的任何文本。

我尝试使用“readonly”或“disabled”属性,但它们不允许光标位于文本框内。所以,我正在考虑在普通文本框上用JavaScript实现的解决方案。有插件已经这样做了吗?我该如何实现呢?

编辑:感谢所有答案,但我想将textarea / input类型文本设置为不可编辑,但同时可以选择。在文本框中按 Ctrl + A 不起作用。是否可以获取更改的值和旧值并比较它们,然后如果值不同则返回false,但在所有其他情况下返回true,以便 Ctrl + A Shift + end 等组合有效吗?

3 个答案:

答案 0 :(得分:3)

这样的事情:

<textarea onkeydown="javascript:return false;"></textarea>

会做到这一点。 (jsfiddle

如果您愿意,也可以在运行时执行此操作:

<textarea class="readonly"></textarea>

$(".readonly").keydown(function() false);

onkeydown回调会捕获击键事件并使用return false;取消它们。

根据您的目的,您可能希望阻止其他类型的事件,例如,仍然可以使用鼠标更改内容。

您的回调函数可以接受或取消事件,具体取决于击键类型。例如,要仅启用ctrl-a和ctrl-c(使用jQuery):

function keydown(e) {
  if(!e.ctrlKey) return false; // Cancel non ctrl-modified keystrokes
  if(e.keyCode == 65) return true;// 65 = 'a'
  if(e.keyCode == 67) return true;// 67 = 'c'
  return false;
}

答案 1 :(得分:1)

$(function(){
  $("inputSelector").keydown(function(){ return false; });
});

答案 2 :(得分:0)

您不能依赖禁用<textarea>作为用户输入,因为删除使用firebug或其他工具禁用任何类型的HTML或JavaScript是微不足道的。请记住,表单不仅限于您提供的字段,任何人都可以向页面提交任何数据。

无论如何,禁用的输入都不会随表格提交,请注意我的建议是不使用textarea 并打印出来。