我试过了:
$('input').keyup(function() {
$(this).attr('val', '');
});
但输入字母后会略微删除输入的文本。是否有任何方法可以防止用户完全输入文本而无需禁用文本字段?
Answers:
一种非Java语言的替代方案,很容易被忽略:您可以使用readonly属性代替disabled属性吗?它防止编辑输入中的文本,但是浏览器以不同的方式设置输入的样式(不太可能“变灰”),例如<input readonly type="text" ...>
如果您不希望该字段显示为“ disabled”或smth,请使用以下命令:
onkeydown="return false;"
这与greengit和Derek所说的基本相同,但要短一些
e.preventDefault();在addEventListener中
onkeydown="return false"
$('input').keydown(function(e) {
e.preventDefault();
return false;
});
标记
<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();}
我喜欢添加一个也可以与动态javascript DOM创建(例如D3)一起使用的应用程序,无法添加:
//.attr(function(){if(condition){"readonly"]else{""}) //INCORRECT CODE !
为了防止对HTML输入DOM元素执行操作,请向类添加只读:
var d = document.getElementById("div1");
d.className += " readonly";
或在D3中:
.classed("readonly", function(){
if(condition){return true}else{return false}
})
并添加到CSS或更少的版本中:
.readonly {
pointer-events: none;
}
这个解决方案的好处是,您可以动态地打开它并在一个函数中打开它,以便可以在创建时将其集成到例如D3中(不能使用单个“ readonly”属性来实现)。
从类中删除元素:
document.getElementById("MyID").className =
document.getElementById("MyID").className.replace(/\breadonly\b/,'');
或使用Jquery:
$( "div" ).removeClass( "readonly" )
或切换班级:
$( "div" ).toggleClass( "readonly", addOrRemove );
只是为了完整,祝您好运= ^)
一种选择是将处理程序绑定到input事件。
这种方法的优点是我们不会阻止用户期望的键盘行为(例如,选项卡,向上/向下翻页等)。
另一个优点是,它还可以处理通过在上下文菜单中粘贴文本来更改输入值的情况。
如果您只关心保持输入为空,则此方法最有效。如果您要保持特定的值,则必须在其他位置(在data属性中)跟踪该值,因为在input接收到事件时该值将不可用。
const inputEl = document.querySelector('input');
inputEl.addEventListener('input', (event) => {
event.target.value = '';
});
<input type="text" />
在Safari 10,Firefox 49,Chrome 54,IE 11中进行了测试。
keydown()或keypress()任何更有效?