0

嗨,我的 javascript 代码有问题,它适用于按 id 输入,但我想在类元素上使用它。我不知道我在做什么错任何想法?我粘贴我的代码我想在我的输入上屏蔽时间

 function maska(inputName, mask, evt) {
     var text = document.getElementsByClassName(inputName);

     try {

         var value = $(text).val(); //text.value;

         // Jeśli ktoś naciśnie dela lub backspace to czyszcze inputa
         try {
             var e = (evt.which) ? evt.which : event.keyCode;
             if (e == 46 || e == 8) {
                 $(text).val() = ""; //text.value = "";
                 return;
             }
         } catch (e1) { }

         var literalPattern = /[0\*]/;
         var numberPattern = /[0-9]/;
         var newValue = "";
         for (var vId = 0, mId = 0; mId < mask.length; ) {

             if (mId >= value.length) 
                 break;
             // Wpada jakaś inna wartość niż liczba przechowuje tylko ta dobra wartosc
             if (mask[mId] == '0' && value[vId].match(numberPattern) == null) {
                 break;
             }

             // Wpadł literał
             while (mask[mId].match(literalPattern) == null) {
                 if (value[vId] == mask[mId])
                     break;

                 newValue += mask[mId++];
             }
             var godzina = value.substr(0, 2);
             var minuty = value.substr(3,4);

             if (minuty > '59' || godzina > '23') {
                 break;
             }
             else
                 newValue += value[vId++];

             mId++;
         }
         text.val() = newValue;
         //text.value = newValue;
     } catch (e) { }
 }
4

4 回答 4

0

getElementById返回单个元素,同时getElementsByClassName返回元素的集合。您需要遍历此集合

function maska(inputName, mask, evt) {
    var text = document.getElementsByClassName(inputName);

    try {

        for (var i = 0; i < text.length; i++) {
            var value = text[i].value;

            // Jeśli ktoś naciśnie dela lub backspace to czyszcze inputa
            try {
                var e = (evt.which) ? evt.which : event.keyCode;
                if (e == 46 || e == 8) {
                    text[i].value = "";
                    continue;
                }
            } catch (e1) { }

            var literalPattern = /[0\*]/;
            var numberPattern = /[0-9]/;
            var newValue = "";
            for (var vId = 0, mId = 0; mId < mask.length; ) {

                if (mId >= value.length) 
                    break;
                // Wpada jakaś inna wartość niż liczba przechowuje tylko ta dobra wartosc
                if (mask[mId] == '0' && value[vId].match(numberPattern) == null) {
                    break;
                }

                // Wpadł literał
                while (mask[mId].match(literalPattern) == null) {
                    if (value[vId] == mask[mId])
                        break;

                    newValue += mask[mId++];
                }
                var godzina = value.substr(0, 2);
                var minuty = value.substr(3,4);

                if (minuty > '59' || godzina > '23') {
                    break;
                }
                else
                    newValue += value[vId++];

                mId++;
            }
            text[i].value = newValue;
        }
    } catch (e) { }
}
于 2013-10-28T08:07:22.683 回答
0

document.getElementById返回单个元素,您的代码将处理该元素。

document.getElementsByClassName返回多个元素。您需要遍历它们并单独处理它们。

于 2013-10-28T07:47:55.670 回答
0

我不明白你为什么使用getElementsByClassName然后使用 jQuery 功能?尝试$('input.' + inputName)

于 2013-10-28T07:58:32.890 回答
0

getElementById返回单个DOMElementwhilegetElementsByClass返回一个元素数组。为了同时允许这两种情况,您可以有一个接受 a 的DOMElement函数和两个查找元素的函数,一个用于 id,一个用于 class:

function maska(elem, mask, evt) {
   try {
         var value = $(elem).val(); 
    // blah blah, rest of the function
}

function maskById(id, mask, evt) {
   var element = document.getElementById(id);
   maska(element, mask, evt);
}

function maskByClass(class, mask, evt) {
    var element_list = document.getElementsByClass(class);
    for(var i = 0; var i < element_list.length; i++) {
        maska(element_list[i], mask, evt);
   }
}

但是你最好使用结合 的 jquery 选择器.each,无论选择器类型如何,它总是将结果作为集合/数组返回。

于 2013-10-28T08:14:59.350 回答