所以我想弄清楚如何在网站的日期字段中自动设置点 我现在在这里使用它
function dots() {
var chars = document.f.vRGDate.value.length;
var text = document.f.vRGDate.value;
if (chars == 2) {
document.f.vRGDate.value = text+".";
}
if (chars == 5) {
document.f.vRGDate.value = text+".";
}
}
HTML部分内容:
<tr>
<td width="130">Reg. Date</td>
<td width="50">
<input type="text" name="vRGDate" value="" size="10" onKeyDown="return isNumberKey(event);" onkeyup="dots();">
</td>
到目前为止它的确有效 - 让我讨厌的是你必须按住Back Backspace来删除某些内容。否则它总是生成这个点。
所以我尝试了一些onKeyDown函数
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : evt.keyCode
// Left, Right, Backspace, DEL
if(charCode==37||charCode==39||charCode==46 || charCode==8){
return false;
}
else {
return true;
}
}
现在,当我按下这4个键中的一个时,由于“返回错误”,它会阻止我。 但这是我不知道的部分。我想在isNumberKey函数中使用一个值并将其传递给dots函数,但我不知道如何..如果它可以工作。有谁知道该怎么办?
感谢您的帮助!
答案 0 :(得分:0)
您对元字符的测试属于“点”功能,而不属于“isnumberkey”功能。
基本上你想说:
第一个项目符号可以在onkeydown
函数中表示,而其他两个项目应该在onkeyup
或change
处理程序中处理。
我必须补充一点,这种用户体验非常令人沮丧;包括我自己在内的许多用户更愿意在文本框中键入他们想要的内容,并且只有在他们离开输入字段后才会应用自动格式化(例如,在blur
事件上)。
答案 1 :(得分:0)
我完全赞同Avish,你应该在完成后验证用户输入,即当输入框上的焦点丢失时。
如果你想忽略他的警告,你可以按如下方式实现:
HTML
<tr>
<td width="130">Reg. Date</td>
<td width="50">
<input type="text" MaxLength="10" id="vRGDate" name="vRGDate" value="" size="10" onKeyDown="isNumberKey(event);">
JAVASCRIPT
function dots(){
var dateBox = document.getElementById('vRGDate')
var chars = dateBox.value.length;
var text = dateBox.value;
if (chars == 2) {
dateBox.value = text + ".";
}
if (chars == 5) {
dateBox.value = text + ".";
}
}
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : evt.keyCode
// CHECK IF NUMBER
if((charCode >=48 && charCode<=57) || (charCode>=96 && charCode<=105)){
//IF KEY IS A NUMBER CALL DOTS
dots();
}
else if(charCode==37||charCode==39||charCode==46 || charCode==8){
// LET LEFT RIGHT BACKSPACE AND DEL PASS
}
else{
// BLOCK ALL OTHER KEYS
evt.preventDefault();
}
}
请注意,用户仍然可以输入无效日期,即“99.99.9999”
您可以使用后续JSFiddle http://jsfiddle.net/7JY4Z/
进行测试只有我的第二个回复希望它有所帮助
亚当