Javascript 使用JQuery,如何使字段可编辑,但用户可以';t型?

Javascript 使用JQuery,如何使字段可编辑,但用户可以';t型?,javascript,jquery,Javascript,Jquery,我有一个字段,当用户点击时,它会弹出一个日期控件。问题是,用户还可以输入无效日期 有没有一种方法可以使用Javascript使字段保持可编辑状态,但防止用户键入任何数字?更新忽略我的答案,并使用只读属性@jfriend00 原件: 您可以尝试阻止keydown的默认操作,但用户仍可以粘贴(或找到其他“聪明”的方法将不需要的数据放入其中) 一个更好的选择可能是使用disabled属性并使用CSS来实现它 更新忽略我的答案,使用只读属性@jfriend00 原件: 您可以尝试阻止keydown的

我有一个字段,当用户点击时,它会弹出一个日期控件。问题是,用户还可以输入无效日期


有没有一种方法可以使用Javascript使字段保持可编辑状态,但防止用户键入任何数字?

更新忽略我的答案,并使用
只读属性@jfriend00


原件:

您可以尝试阻止
keydown
的默认操作,但用户仍可以粘贴(或找到其他“聪明”的方法将不需要的数据放入其中)

一个更好的选择可能是使用
disabled
属性并使用CSS来实现它


更新忽略我的答案,使用
只读
属性@jfriend00


原件:

您可以尝试阻止
keydown
的默认操作,但用户仍可以粘贴(或找到其他“聪明”的方法将不需要的数据放入其中)

一个更好的选择可能是使用
disabled
属性并使用CSS来实现它


我想您需要一个只读字段:

它仍然可以使用javascript进行修改,您仍然可以截取单击事件,但用户不能键入、复制/粘贴或拖放到它

此处演示:


尝试拦截击键的选项可能不会阻止一切(如拖放)。使用内置的只读功能更有意义。

我想您需要一个只读字段:

它仍然可以使用javascript进行修改,您仍然可以截取单击事件,但用户不能键入、复制/粘贴或拖放到它

此处演示:


尝试拦截击键的选项可能不会阻止一切(如拖放)。使用内置的只读功能更有意义。

您可以将按键处理程序绑定到该文本字段,并返回按下时的假数字:

$('#field_id').keydown(function(event){
  if(event.keyCode > 47 && event.keyCode < 59)
    return false;
  return true;
});
$(“#字段_id”).keydown(函数(事件){
如果(event.keyCode>47&&event.keyCode<59)
返回false;
返回true;
});
如果您还想阻止ctrl-v和上下文菜单(以便能够从中粘贴),请使用

$(“#字段_id”).keydown(函数(事件){
var k=event.keyCode;
if((k>47和&k<59)| |(k='86'和&event.ctrlKey))
返回false;
返回true;
}).bind('contextmenu',函数(e){
返回false;
});

Linux时,你也应该考虑防止中间点击粘贴:

你可以将KEYDOWN处理程序绑定到那个文本字段,并返回错误的数字:

$('#field_id').keydown(function(event){
  if(event.keyCode > 47 && event.keyCode < 59)
    return false;
  return true;
});
$(“#字段_id”).keydown(函数(事件){
如果(event.keyCode>47&&event.keyCode<59)
返回false;
返回true;
});
如果您还想阻止ctrl-v和上下文菜单(以便能够从中粘贴),请使用

$(“#字段_id”).keydown(函数(事件){
var k=event.keyCode;
if((k>47和&k<59)| |(k='86'和&event.ctrlKey))
返回false;
返回true;
}).bind('contextmenu',函数(e){
返回false;
});


对于Linux,你还应该考虑防止中间点击粘贴:

你应该检查Onchange,因为用户可以复制粘贴日期,而不用键盘。@ Meo,你说得对。我最初的测试使用了这一点,但我忽略了一个事实,
onchange
只有在焦点丢失时才会触发——我认为它根本没有触发,因此将其从原始帖子中删除。已更新。您应该检查onChange to,因为用户可以复制粘贴日期,而无需使用键盘。@meo,您是对的。我最初的测试使用了这一点,但我忽略了一个事实,
onchange
只有在焦点丢失时才会触发——我认为它根本没有触发,因此将其从原始帖子中删除。已更新。如果用户无法在其中键入内容,它以什么方式“可编辑”?它不可直接编辑,但值可以更改。虽然不想让它看起来被禁用,但不会使它非常容易访问,只是防止键入如果用户无法键入,它以什么方式是“可编辑的”?它不是直接可编辑的,但值可以更改。虽然我不想让它看起来被禁用,但这并不能使它非常容易访问,只是防止键入我已经将此解决方案与jQuery UI datepicker一起使用。它起作用了+1+1为我展示了一个我以前从未见过的属性,这在IE7和IE8中适用吗?谢谢jfriend00,听起来不错。在这种情况下,我无法访问原始渲染。我可以通过JQuery添加只读属性,这是一个很好的替代方法。它起作用了+1+1为我展示了一个我以前从未见过的属性,这在IE7和IE8中适用吗?谢谢jfriend00,听起来不错。在这种情况下,我无法访问原始渲染。我可以通过JQuery添加只读属性,这是一个很好的选择。谢谢petho,因为我无法控制原始HTML生成,这似乎是实现相同结果的最简单方法。这会阻止通过键盘或鼠标右键单击或拖放粘贴吗?我认为不会。不,它不会阻止通过键盘或鼠标粘贴。你必须进行更多的黑客攻击来防止这种情况。键盘粘贴应该很容易(只需在if语句中添加一些内容),鼠标需要黑客鼠标向下事件处理和阻止上下文菜单弹出,不确定是否可以在所有相关浏览器中执行此操作也添加了键盘粘贴+上下文菜单粘贴防止。当然,没有什么是完美的,如果您使用ctrl-v进行粘贴,或者使用鼠标中键单击进行粘贴,或者使用jquery contextmenu事件不支持的浏览器,则仍然可以对其进行黑客攻击:)谢谢petho,因为我无法控制原始HTML生成,这似乎是实现相同结果的最简单方法。这是否阻止通过键盘或鼠标右键单击或拖放粘贴?我认为不会。不,它不会阻止通过键盘或鼠标粘贴。你会的
$('#field_id').keydown(function(event){
  if(event.keyCode > 47 && event.keyCode < 59)
    return false;
  return true;
});
$('#field_id').keydown(function(event){
  var k = event.keyCode;
  if((k > 47 && k < 59) || (k == '86' && event.ctrlKey))
    return false;
  return true;
}).bind('contextmenu',function(e){
  return false;
});