Chrome не отображает класс, установленный jQuery или свойством Direct CSS - PullRequest
7 голосов
/ 15 мая 2010

Может показаться, что это вопрос дизайна / CSS, но мне действительно нужна помощь.

Это страница http://library.permilia.com/Gavin/version2.0_beta/lead.html

Работает на всех мыслимых браузерах, кроме chrome.

Под этим работает, я имею в виду, что он применяет класс .error, который устанавливает границы в 1px solid # f00, который является красной рамкой В Chrome по какой-то причине вы не можете изменить его, несмотря ни на что!

У кого-нибудь есть идеи?

Ответы [ 2 ]

6 голосов
/ 15 мая 2010

Итак ... ответ таков: ни один из ваших JS-кодов никогда не запускается, потому что Chrome реализует элементы ввода HTML5, включая проверку формы. Таким образом, если вы правильно не заполните поля, ваш код проверки никогда не сработает!

В HTML5 атрибут required является логическим значением, либо true, либо false. Согласно спецификации , браузер должен запустить событие invalid в поле проблемы. Вы можете отменить поведение блокировки по умолчанию в этой точке, если хотите. Однако ваш сценарий снова выходит из строя при попытке attr('required'). Он вернет true или false в Chrome, используя HTML5, а не значение, подобное email, как вы ожидаете.

Так что вам нужно добавить эти две части, если вы хотите, чтобы это работало:

$(":input").bind("invalid", function(e){
   e.preventDefault(); // Don't block the form submit
});

А затем перефакторинг вашего кода с

var a = $(this).attr('required');

будет

var a = $(this).attr('required') ? $(this).attr('type') : "";

И при необходимости измените оператор switch, чтобы он соответствовал

Последняя идея : Вы также можете выбрать действительно крутой подход (он же «Обнаружение функций») и сделать это вместо этого:

Оберните внутреннюю часть вашей текущей функции validate: следующим:

if(typeof $('<input />')[0].checkValidity === "undefined") {
  ... existing code ..
} else {
  $(':input').bind('invalid', function(){
     $(this).addClass('error');
  }).blur(function(){
     // If valid, turn off error
     // If invalid, turn on error
     $(this).toggleClass('error', !this.checkValidity());
  });
}

Вот демонстрационная версия второй версии, которая будет работать в Chrome и, возможно, текущей / бета-версии Opera.

1 голос
/ 15 мая 2010

Ваш CSS-файл не с настройкой "background-color". Это настройка "* background-color". Это, вероятно, своего рода, если взломать IE, но вам нужно установить «реальное» свойство стиля («background-color» без звездочки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...