0

Я использую плагин проверки jQuery для проверки моей формы и использования подсказки подсказок для сообщений об ошибках. У меня есть проблема с работой в раскрывающемся меню в IE 10/11.jQuery Validation and Tipsy не работает с select в IE

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

$('[id^="form-"] :input').tipsy({ 
     trigger: 'manual', 
     fade: true, 
     gravity: 'e', 
     className: 'tip-blue' 
    }); 


    $("#form-account").validate({ 
    ... 
    errorPlacement: function (error, element) 
    { 
     element.attr('title', error.text()); 
     element.tipsy('show'); 
    }, 

Как это исправить?

JSFIDDLE

+0

Интеграция подсказке плагин JQuery с помощью плагина JQuery Validate может быть очень сложной задачей, зависит от методов, предоставляемых обоими модулями. Поэтому вам придется приложить гораздо больше усилий, чтобы написать свой вопрос ... например, включить более полную демоверсию вместе с соответствующим HTML и остальную часть того, что находится внутри вашего метода '.validate(). Между тем [взгляните на этот вопрос] (http://stackoverflow.com/a/14741689/594235), чтобы узнать, о чем я говорю. – Sparky

+0

Поскольку jQuery разработан, чтобы нормализовать эти поведения для работы во всех браузерах, включая IE 10/11, вам действительно нужно будет изучить вашу структуру HTML. Я подозреваю, что у вас есть недопустимый HTML, который Explorer не может обработать. – Sparky

+0

@Sparky - код html не сообщает об ошибках (с firebug и консолью IE). Я прочитал сообщение, где кто-то сказал, что «похоже, что IE не нравится атрибут title при выборе». –

ответ

1

Цитата OP:

поле сообщает нужное сообщение

Вся эта проблема связана с тем, как IE является запуск события, когда вы делаете выбор. В других браузерах просто выбор новой опции сразу вызывает повторную проверку. Однако в проводнике повторная проверка не запускается до тех пор, пока вы не полностью сосредоточитесь на поле select.

Обходным путем является ручной захват события change и повторная валидация силы с использованием метода плагина .valid().

$('[name="user"]').on('change', function() { 
    $(this).valid(); 
}); 

DEMO: http://jsfiddle.net/d7apuegL/


Цитата OP:

выпадающий открывается и закрывается автоматически

Это потому, что IE перерисовывает активированный элемент select каждый раз, когда вы меняете его атрибут title; и ваша функция errorPlacement меняет title всякий раз, когда вы пытаетесь сделать выбор.

Это не идеальный вариант, но единственное обходное решение, похоже, перемещает собственное сообщение об ошибке в атрибут titleselect.

HTML:

<select name="user" id="test" title="error"> 

JQuery:

errorPlacement: function (error, element) { 
    // element.attr('title', error.text()); // remove this 
    element.tipsy('show'); 
}, 

DEMO: http://jsfiddle.net/d7apuegL/1/


Пока ваше решение зависит от динамического изменения атрибута title в то время как select активирован, у вас всегда будет какая-то форма этой проблемы.Это именно то, как работает IE, поэтому лучше всего полностью нарушить зависимость от атрибута title или полностью использовать другой всплывающий плагин.

См: How to display messages from jQuery Validate plugin inside of Tooltipster tooltips?

DEMO: http://jsfiddle.net/2012j6dv/

+0

Второй вариант, похоже, решил мою проблему, но я понял, что после того, как я выбрал поле и попытаюсь его снова выбрать, проблема (закрытие автоматически) все еще происходит .. спасибо за ваш помогите! –

+0

@PaoloRossi, я сказал, что это не идеально, и пока вы зависите от изменения атрибута 'title' при активации select, у вас всегда будет какая-то форма этой проблемы. мой, я бы полностью нарушил зависимость от атрибута 'title' и при необходимости использовал другой плагин подсказки. – Sparky

+0

Большое вам спасибо за вашу помощь и время, которое вы посвятили моей проблеме. Я хотел бы спросить вас, если вы знаете плагин подсказки, который позволяет мне решить эту проблему. Еще раз спасибо –

Смежные вопросы