如何防止用户input文本字段而不禁用字段?

我试过了:

$('input').keyup(function() { $(this).attr('val', ''); }); 

但是在input一个字母之后它会略微移除input的文本。 无论如何阻止用户完全input文本而不诉诸禁用文本字段?

可以很容易忽略的非Javascript替代方法:您可以使用readonly属性而不是disabled属性吗? 它可以防止编辑input中的文本,但是浏览器对input进行不同的样式(不太可能使其“灰显”),例如<input readonly type="text" ...>

如果您不希望该字段显示为“禁用”或不正确,请使用以下命令:

 onkeydown="return false;" 

这与Greengit和Derek说的基本一样,但是稍微短一些

 $('input').keydown(function(e) { e.preventDefault(); return false; }); 
 $('input').keypress(function(e) { e.preventDefault(); }); 

标记

 <asp:TextBox ID="txtDateOfBirth" runat="server" onkeydown="javascript:preventInput(event);" onpaste="return false;" TabIndex="1"> 

脚本

 function preventInput(evnt) { //Checked In IE9,Chrome,FireFox if (evnt.which != 9) evnt.preventDefault();} 

只是使用onkeydown =“return false”来控制标签,如下所示,它不会接受来自用户的值。

  <asp:TextBox ID="txtDate" runat="server" AutoPostBack="True" ontextchanged="txtDate_TextChanged" onkeydown="return false" > </asp:TextBox> 

如果文本在键入之前显示,那么它可能在keydown事件中触发。 你试过那个吗?

另一种方法可以根据需要使用$('input').onfocus(function(){this.blur()}); 我想这是你如何写它。 我不熟练jQuery。

我喜欢添加一个也适用于dynamicjavascript DOM创build像D3一样,它不可能添加:

 //.attr(function(){if(condition){"readonly"]else{""}) //INCORRECT CODE ! 

阻止对HTMLinputDOM元素的操作添加只读到类:

 var d = document.getElementById("div1"); d.className += " readonly"; 

或在D3中:

  .classed("readonly", function(){ if(condition){return true}else{return false} }) 

并添加到CSS或更less:

 .readonly { pointer-events: none; } 

这个解决scheme的好处在于,你可以dynamic地打开它,并在一个函数中,因此它可以在创build时集成到D3中(不可能用单个“只读”属性)。

从类中删除元素:

 document.getElementById("MyID").className = document.getElementById("MyID").className.replace(/\breadonly\b/,''); 

或者使用jquery:

 $( "div" ).removeClass( "readonly" ) 

或切换类:

 $( "div" ).toggleClass( "readonly", addOrRemove ); 

只是为了完成,祝你好运= ^)

一种select是将处理程序绑定到input事件。

这种方法的优点是,我们不阻止用户期望的键盘行为(例如标签,页面向上/向下等)。

另一个优点是它也处理通过上下文菜单粘贴文本来改变input值的情况。

如果您只关心保持input为空,此方法效果最佳。 如果你想维护一个特定的值,你必须跟踪其他地方(在一个数据属性中?),因为当接收到input事件时它将不可用。

 const inputEl = document.querySelector('input'); inputEl.addEventListener('input', (event) => { event.target.value = ''; }); 
 <input type="text" />