【问题标题】:Unable to implement solution by using .keyup, .keydown ,.keypress无法使用 .keyup、.keydown、.keypress 实现解决方案
【发布时间】:2014-04-10 11:55:15
【问题描述】:

我正在尝试编写一个可以让我填写手机号码的代码。字段比较少,我的代码如下。

HTML

<div class="control-group">
   <label class="control-label" for="inputPhone">Cell Phone Number #:</label>
      <div class="controls"> 
      <?php 
         $home_no=$blogger_info[0]->home_phone;
         $home_phone=explode('-',$home_no);
       ?>
       <input class="span3 mr-botom-10" type="tel" id="HomePhone1" name="HomePhone1" value="<?=$home_phone[0]; ?>" onkeydown="phoneNumberValidate('HomePhone1',3,'HomePhone2')" maxlength="3"  pattern="<?php echo NUMBER_PATTERN_3_DIG; ?>" title="<?php echo NUMBER_PATTERN_3_MSG; ?>">   
       <input class="span3 mr-botom-10" type="tel" id="HomePhone2" name="HomePhone2" value="<?=$home_phone[1]; ?>" onkeydown="phoneNumberValidate('HomePhone2',3,'HomePhone3')" maxlength="3"  pattern="<?php echo NUMBER_PATTERN_3_DIG; ?>" title="<?php echo NUMBER_PATTERN_3_MSG; ?>">                                           
       <input class="span3 mr-botom-10" type="tel" id="HomePhone3" name="HomePhone3"  value="<?=$home_phone[2]; ?>" onkeydown="phoneNumberValidate('HomePhone3',4,'')" maxlength="4"  pattern="<?php echo NUMBER_PATTERN_4_DIG; ?>" title="<?php echo NUMBER_PATTERN_4_MSG; ?>">    
     </div>
 </div>

JS代码:

function phoneNumberValidate(phone1,match_len,phone2)
{

  //called when key is pressed in textbox
  $("#"+phone1).keypress(function (e) 
  {
     //if the letter is not digit then display error and don't type anything
         if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) 
         {
             return false;
         }
         else
         {
          var phone=$("#"+phone1).val();

          var field_len=phone.length;


           if(field_len==match_len && e.which != 8 )
           {
             $("#"+phone2).focus();
           }
         }
   });

} 

我在上面的代码中尝试做的是:当用户开始在具有三个输入文本框的Cell Phone Number 字段中输入数字时,在第一个输入框中输入 3 位数字后,焦点将自动转移到下一个输入盒子。
它工作正常,只有一个主要缺点,当用户输入第 4 个数字时,它不会进入第二个输入框中,因为焦点正在转移到该输入框,第 8 个数字也会发生同样的情况。
我有试过keydown(给出相同的结果),keyup(验证不起作用),请帮忙。

【问题讨论】:

  • 试过使用 keyup 和 keydown 吗?
  • @sameer patil 你能提供一个 jsfiddle 吗?
  • @Evan Knowles:是的,我将这两个事件都与 keydown 一起使用:它吃第 4 位和第 8 位数字,并且使用 keyup 它不会验证输入,因为它是否是数字......

标签: javascript jquery html keypress keydown


【解决方案1】:

试试这个,它会起作用的

function phoneNumberValidate(phone1,match_len,phone2)
{
  //called when key is pressed in textbox
  $("#"+phone1).keypress(function (e) 
  {
    var entered_key = String.fromCharCode(e.which);
     //if the letter is not digit then display error and don't type anything
         if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) 
         {
             return false;
         }
         else
         {
          var phone=$("#"+phone1).val();
          var field_len=phone.length;
           if(field_len==match_len && e.which != 8 )
           {
             $("#"+phone2).focus().val(entered_key);

           }
         }
   });

} 

【讨论】:

  • 嗨,这个解决方案有一个小问题......我们正在 IE 10.0.7 上测试这个解决方案......它在输入文本框中再次重复第 4 位和第 8 位数字(它在 ff 和 crome 中运行良好)....请帮助
  • 尝试不使用链接方法,我的意思是把 $("#"+phone2).val(entered_key); 放在焦点下方
  • 应用不工作仍然重复第 4 位和第 8 位数字
  • 你能检测到IE并删除多余的值吗:D
  • 我已经这样做了:$("#"+phone2).focus(); // $("#"+phone2).val(entered_key);它适用于 ie,但 ff 和 crome 仍然存在原始问题
【解决方案2】:

我稍微修改了代码并使用了 keyup。我在 jsbin 上创建了一个示例 - http://jsbin.com/gugozure/1/edit

如果这是你想要的,请告诉我。

function phoneNumberValidate(phone1, match_len, phone2) {

$("#" + phone1).keyup(function (e) {
    if (e.which !== 8 && e.which !== 0 && (e.which < 48 || e.which > 57)) {
        return false;
    } else {
        var phone = $("#" + phone1).val();

        var field_len = phone.length;

        if (field_len == match_len && e.which != 8) {
            $("#" + phone2).focus();
        }
    }
});
}

【讨论】:

  • 它适用于验证,但不能保留第 4 位和第 8 位....感谢您的建议...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 2018-02-20
  • 2011-03-23
  • 1970-01-01
相关资源
最近更新 更多