1

Тема: javascript

Допустим, у меня есть js, который отлично работает в Google Chrome, но не хочет работать в других браузерах. Запустил этот код в Fire Fox, включив Fire Bug. Получил такую ошибку: invalid range in character class. Что с этим делом делать?

2

Re: javascript

Ketsyki сказал:

invalid range in character class

Покажите часть кода вокруг строки вызывающей данную ошибку. Попробуем разобраться вместе. Используйте для отладки Firebug.

3

Re: javascript

Тут проблема в том, что FireBug просто пишет, что есть такая ошибка, и не пишет, где в какой она строке. Я сейчас попросил его показать предупреждения. Дак он выдал кучу предупреждений, касающихся библиотеки JQuery.

4

Re: javascript

Тогда выложите где-нибудь файл скрипта, чтобы его можно было посмотреть.

5 (изменено: Ketsyki, 2011-05-11 18:33:05)

Re: javascript

Путем нехитрых манипуляций (удаление скрипта) установил, что не работает этот код.

Код написан с использованием JQuery. Код делает проверку формы. Но я такую проверку использовал еще в одном месте, но там проверял только 3 инпута, и код прекрасно работал.

<script type="text/javascript">
     

         

    $(document).ready(function() {

 $.validator.addMethod("Docname",function(value,element){
if($("#Section option:selected").val() != "")
{
if($("#Docname")[0].value){
return this.optional(element) || /^[а-яА-ЯёЁa-zA-Z0-9-.,\№\s]{2,}$/i.test(value);
}

         }
else 
return true;
    },"Ошибка");

$.validator.addMethod( 
       "file1",
      function(value, element) { 
        if($("#Section option:selected").val() != "")
{
 if($("#file1")[0].value){
        
          return true;} else return false; }
 else

 return true;
        
      }, 
      "Ошибка." 

    );


 $.validator.addMethod("Surname",function(value,element){
    return this.optional(element) || /^[а-яА-ЯёЁ-\s]{2,}$/i.test(value);
    },"Ошибка.");


$.validator.addMethod("Name1",function(value,element){
    return this.optional(element) || /^[а-яА-ЯёЁ-\s]{2,}$/i.test(value);
    },"Ошибка.");


 $.validator.addMethod("Patronymic",function(value,element){
    return this.optional(element) || /^[а-яА-ЯёЁ-\s]{2,}$/i.test(value);
    },"Ошибка.");
    

$.validator.addMethod("Email", function(value, element) {  
    return this.optional(element) || /^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/i.test(value);  
    }, "Ошибка.");

$.validator.addMethod("Telephone", function(value, element) {  
    return this.optional(element) || /^[0-9+]{2,}$/i.test(value);  
    }, "Ошибка.");


$.validator.addMethod( 
       "selectNone1",
      function(value, element) { 
        if (element.value == "") 
        { 
          return false; 
        } 
        else return true; 
      }, 
      "Ошибка." 
    ); 

$.validator.addMethod("Date", function(value, element) {  
    return this.optional(element) || /^[0-9]+\-[0-9]+\-[0-9]{2}$/i.test(value);  
    }, "Ошибка.");



$.validator.addMethod( 
       "selectNone2",
      function(value, element) { 
        if (element.value == "-2") 
        { 
          return false; 
        } 
        else return true; 
      }, 
      "Ошибка." 
    ); 


$.validator.addMethod( 
       "selectNone3",
      function(value, element) { 
        if (element.value == "-1") 
        { 
          return false; 
        } 
        else return true; 
      }, 
      "Ошибка." 
    ); 



$.validator.addMethod( 
       "selectNone4",
      function(value, element) { 
        if (element.value == "-1") 
        { 
          return false; 
        } 
        
else
return true; 
      }, 
      "Ошибка." 
    ); 



$.validator.addMethod("Addcity",function(value,element){
if($("#city option:selected").val() == -2)
{
if($("#addCity")[0].value){
return this.optional(element) || /^[а-яА-ЯёЁ-\s]{2,}$/i.test(value);
}

         }
else 
return true;
    },"Ошибка");
 



$.validator.addMethod( 
       "selectNone5",
      function(value, element) { 
        if (element.value == "-1") 
        { 
          return false; 
        } 
        
else
return true; 
      }, 
      "Ошибка." 
    ); 




$.validator.addMethod("Addschool",function(value,element){
if($("#school option:selected").val() == -2)
{
if($("#addSchool")[0].value){
return this.optional(element) || /^[а-яА-ЯёЁ0-9-.,\№\s]{2,}$/i.test(value);
}

         }
else 
return true;
    },"Ошибка");



$.validator.addMethod("Address",function(value,element){
    return this.optional(element) || /^[а-яА-ЯёЁ0-9.,_\№-\s]{2,}$/i.test(value);
    },"Ошибка.");



$.validator.addMethod( 
       "selectNone6",
      function(value, element) { 
        if (element.value == "") 
        { 
          return false; 
        } 
        else return true; 
      }, 
      "Ошибка." 
    );
 





        // Validate signup form
        $("#signup").validate({
                rules: {
                        
        Docname: {  Docname: true },


 
file1: {
accept: "doc|pdf",
          file1: true
      },
        Surname: "required Surname",
        Name1: "required Name1",
        Patronymic: "required Patronymic",
        Email: "required Email",
        Telephone: "required Telephone",
        
        
                  
          Sex: { 
            selectNone1: true 
          }, 
         
        Date: "required Date",

        country_id: { 
            selectNone2: true
        },

        region_id: { 
            selectNone3: true
        },


        city_id: { 
            selectNone4: true
},


Addcity: {  Addcity: true },



school_id: { 
            selectNone5: true
},



Addschool: {  Addschool: true },

        

Address: "required Address",


Class: { 
            selectNone6: true
},
    



}
                

            

        });
    
   


    });

</script>

6

Re: javascript

Неверно сформировано регулярное выражение.
/^[а-яА-ЯёЁ-\s]{2,}$/i.test(value);
Получается диапазон от Ё до \s (Ё-\s) что является ошибкой. Правильно будет экранировать символ дефиса, чтобы он не воспринимался как оператор:
/^[а-яА-ЯёЁ\-\s]{2,}$/i.test(value);
Учитывая ключ i указывающий на регистронезависимые поиск, еще правильнее будет так:
/^[а-яё\-\s]{2,}$/i.test(value);

7

Re: javascript

Точно. Спс smile Про ошибки в регулярных выражениях не подумал.

В Хроме, Огнелисе, Опере скрипт работает. В IE нет.

Может быть, можно с как-то запретить заходить на сайт через IE? smile

8

Re: javascript

Ketsyki сказал:

В Хроме, Огнелисе, Опере скрипт работает. В IE нет.

Какие ошибки выдает IE?

9 (изменено: Ketsyki, 2011-05-11 18:34:01)

Re: javascript

SCRIPT1028: Предполагается наличие идентификатора, строки или числа
childrens.html, строка 368 символ 2

Это место в самом низу кода, где в строк стоит одна фигурная скобка (4 строка с низу).

10

Re: javascript

Попробуйте здесь убрать последнюю запятую.

Class: { 
            selectNone6: true
},

11

Re: javascript

Все. Работает.

А почему так? В гугле такой код рботает. Огнелису и Опере не понравились только регулярные выражения, а а IE  еще и запятая?

12

Re: javascript

Ketsyki сказал:

А почему так? В гугле такой код рботает. Огнелису и Опере не понравились только регулярные выражения, а а IE  еще и запятая?

Я не делаю браузеры, поэтому не знаю почему они так отличаются в поведении, но очевидно, что некоторые из них допускают определенные вольности, другие нет. В регулярном выражении была ошибка, лишняя запятая - это тоже ошибка. Разработчик не должен допускать ошибок, тогда особенности поведения браузеров будут не так страшны.