日期中的自动点 - 在两个函数之间传递值或其他内容?

时间:2014-01-27 14:50:46

标签: javascript function

所以我想弄清楚如何在网站的日期字段中自动设置点 我现在在这里使用它

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函数,但我不知道如何..如果它可以工作。有谁知道该怎么办?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您对元字符的测试属于“点”功能,而不属于“isnumberkey”功能。

基本上你想说:

  • 我只接受数字键或其中一个支持的元键(箭头键,退格键,del等)。
  • 输入密钥后,如果它不是元密钥,我会自动插入相关的点
  • (可选)一旦你键入了一个键,如果它是一个删除键,我会自动删除相关的点。

第一个项目符号可以在onkeydown函数中表示,而其他两个项目应该在onkeyupchange处理程序中处理。

我必须补充一点,这种用户体验非常令人沮丧;包括我自己在内的许多用户更愿意在文本框中键入他们想要的内容,并且只有在他们离开输入字段后才会应用自动格式化(例如,在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/

进行测试

只有我的第二个回复希望它有所帮助

亚当