掩码为id而不是为类工作

时间:2013-10-28 07:44:08

标签: javascript

嗨我的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 个答案:

答案 0 :(得分:0)

document.getElementById返回一个元素,编写代码以处理它。

document.getElementsByClassName返回多个元素。你需要遍历它们并逐个处理它们。

答案 1 :(得分:0)

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

答案 2 :(得分: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) { }
}

答案 3 :(得分:0)

getElementById返回单个DOMElement,而getElementsByClass返回元素数组。要允许两者,你可以有一个接受DOMElement的函数和两个找到元素的函数,一个用于id,一个用于类:

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结合使用,它总是将结果作为一个集合/数组返回,而不管选择器类型如何。