#jquery #jquery-plugins #jquery-selectors
#jquery #jquery-плагины #jquery-селекторы
Вопрос:
Я создаю свой собственный плагин проверки jQuery. Каков наилучший способ выбора полей ввода с атрибутом data-validate в плагине? для пояснения sent $('form').validate()
, может быть, плагин может работать с более чем 1 формой на данной странице
новая проблема, поэтому я теперь использую
var options = $.extend(defaults, options);
return this.each(function()
{
form=this;
//lazy
$(this).submit(function()
{
var o = options;
$('[' o.attr ']', form).each(function()
{
var val=$(this).val()
alert($(this).attr('name'))
})
//if errors
//encapsulate error group
//add to html with .after()
return false;
//no errors send
})
});
происходит то, что по какой-то причине плагин получает только последнюю форму. обратите внимание, что у меня есть только основная функция плагина o. значение attr — проверка данных, которая работает.
вот ссылка на страницу, на которой я ее создаю http://yamikowebs.com/_test/project /
Ответ №1:
(function(){
$.fn.myplugin = function(options) {
return this.each(function(){ // <-- this part makes your function execute on every element passed to it
$('input[data-validate]', this).each(function(){ // <-- this part iterates over all inputs with an attribute of "data-validate" in the current (", this" part) form
// do stuff here
});
});
}
})(jQuery);
Использование:
$('form').myplugin();
// |
// |
// --- If multiple forms are on the page, jQuery will pass all of them to your plugin
Дальнейшее чтение: разработка плагина jQuery.
Редактировать
Бонус: рабочая скрипка, чтобы проиллюстрировать все это
Редактировать 2
Блин, не должно быть SO, когда устал. Обновленный ответ и скрипка, чтобы фактически ответить на вопрос OP.
Ответ №2:
$('input[data-validate]').each(function() { ... });
Комментарии:
1. не будет делать. что делать, если плагин отправляется в форму и работает с более чем 1 формой
2. Для этого
each
и предназначен.3. каждый из них перебирает ВСЕ входные данные с помощью проверки данных, включая другие формы на странице.