【问题标题】:Creating function to use many times创建多次使用的函数
【发布时间】:2016-09-13 11:25:18
【问题描述】:

在此先感谢您的帮助...我对 PHP 和 Javascript 非常陌生 - 但我很享受这种体验。我在表单上有 2 个字段,只需要接受正整数并使用来自 jQuery: what is the best way to restrict "number"-only input for textboxes? (allow decimal points) 的代码和 cmets 我能够提出以下代码,如果切换到包含小数位,还将检查用户是否有只输入了一位小数:

     $(document).ready(function() { 
     $("#NoOfClients").keypress(function(event) {
        // Backspace, tab, enter, end, home, left, right
        // We don't support the del key in Opera because del == . == 46.
        // Add 46 to ControlKeys for allowing decimal point
        var controlKeys = [8, 9, 13, 35, 36, 37, 39];
        // IE doesn't support indexOf
        var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
        var hasDecimalPoint = (($(this).val().split('.').length-1)>0);
        // Some browsers just don't raise events for control keys. Easy.
        // e.g. Safari backspace.
        if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
        (49 <= event.which && event.which <= 57) || // Always 1 through 9
        (48 == event.which && $(this).attr("value")) || // No 0 first digit
        (isControlKey && !hasDecimalPoint)) { // Opera assigns values for control keys.
           return;
        } else {
           event.preventDefault();
        }
     });
     $("#NoOfClientContacts").keypress(function(event) {
        // Backspace, tab, enter, end, home, left, right
        // We don't support the del key in Opera because del == . == 46.
        // Add 46 to ControlKeys for allowing decimal point
        var controlKeys = [8, 9, 13, 35, 36, 37, 39];
        // IE doesn't support indexOf
        var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
        var hasDecimalPoint = (($(this).val().split('.').length-1)>0);
        // Some browsers just don't raise events for control keys. Easy.
        // e.g. Safari backspace.
        if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
        (49 <= event.which && event.which <= 57) || // Always 1 through 9
        (48 == event.which && $(this).attr("value")) || // No 0 first digit
        (isControlKey && !hasDecimalPoint)) { // Opera assigns values for control keys.
           return;
        } else {
           event.preventDefault();
        }
     });
     });

如您所见,这两个控件是相同的......我想做的是让按键功能成为一个独立的功能,这样我就可以在定义表单输入时包含它......但我不知道从哪里开始。

对不起,如果我使用了错误的术语 - 但一直在学习。如果我设法解决(或接近)我会在这里发布答案。

【问题讨论】:

    标签: javascript forms function integer field


    【解决方案1】:

    .keypress接收函数作为参数,你可以发送一个命名函数指针

    function handleKey(event) {
        // Backspace, tab, enter, end, home, left, right
        // We don't support the del key in Opera because del == . == 46.
        // Add 46 to ControlKeys for allowing decimal point
        var controlKeys = [8, 9, 13, 35, 36, 37, 39];
        // IE doesn't support indexOf
        var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
        var hasDecimalPoint = (($(this).val().split('.').length-1)>0);
        // Some browsers just don't raise events for control keys. Easy.
        // e.g. Safari backspace.
        if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
        (49 <= event.which && event.which <= 57) || // Always 1 through 9
        (48 == event.which && $(this).attr("value")) || // No 0 first digit
        (isControlKey && !hasDecimalPoint)) { // Opera assigns values for control keys.
            return;
        } else {
            event.preventDefault();
        }
    }
    

    使用:

    $(document).ready(function() { 
         $("#NoOfClients").keypress(handleKey);
         $("#NoOfClientContacts").keypress(handleKey);
     });
    

    【讨论】:

      【解决方案2】:

      是的,你可以试试下面的方法 -

       function inputHandler(elem){
           $(elem).keypress(function(event) {
              // Backspace, tab, enter, end, home, left, right
              // We don't support the del key in Opera because del == . == 46.
              // Add 46 to ControlKeys for allowing decimal point
              var controlKeys = [8, 9, 13, 35, 36, 37, 39];
              // IE doesn't support indexOf
              var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
              var hasDecimalPoint = (($(this).val().split('.').length-1)>0);
              // Some browsers just don't raise events for control keys. Easy.
              // e.g. Safari backspace.
              if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
              (49 <= event.which && event.which <= 57) || // Always 1 through 9
              (48 == event.which && $(this).attr("value")) || // No 0 first digit
              (isControlKey && !hasDecimalPoint)) { // Opera assigns values for control keys.
                 return;
              } else {
                 event.preventDefault();
              }
           });
        }
      

      您可以为多个输入调用此函数,如下所示 -

       inputHandler('#NoOfClients');
       inputHandler('#NoOfClientContacts');
      

      【讨论】:

        猜你喜欢
        • 2015-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        相关资源
        最近更新 更多