JQuery-Validation - использование метода правил для выбранного идентификатора, почему атрибут имени должен присутствовать в элементе?

Меня немного смущает поведение плагина проверки JQuery.

Если у меня есть следующий JQuery:

$('#form1').validate({
    /* other validation */
});

$('#txt1').rules("add",
{
    required: true,
    messages: { required: 'This is required!' }
});

и следующий текстовый ввод с идентификатором, но без атрибута имени:

<input type="text" id="txt1"/>

В текстовом поле не появляется требуемое сообщение.

Однако, если я добавлю атрибут имени:

<input type="text" id="txt1" name="anything"/>

Он подтверждает это просто отлично.

Почему это? Поскольку я использую метод rules("add", rules) в селекторе ID, почему ему нужен атрибут имени, чтобы связать правила с элементом? Спасибо за любое понимание!


person Mike    schedule 03.01.2013    source источник


Ответы (2)


Атрибут name требуется для элемента, во-первых, потому что это то, что проверка jQuery использует внутри в качестве ключа для каждого поля, а во-вторых, потому что атрибут name требуется для input элементов, чтобы гарантировать, что страница проверяется на соответствие указанному DOCTYPE.

person Rory McCrossan    schedule 03.01.2013
comment
Спасибо за объяснение! - person Mike; 03.01.2013

Если вы хотите применить правила, используя идентификатор, используйте следующее:

$(function () {
  var $field = $("#id_field").attr("name");
  var $params = {debug:false, rules:{}, messages:{}};
  $params['rules'][$field] = {"required": true, "rule": ["params"]};
  $params['messages'][$field] = "error message";

  $("#frm").validate($params);
});
person Sakeer    schedule 02.05.2014
comment
Можете ли вы расширить объяснение здесь, как этот код позволяет валидатору находить элементы на основе атрибута id? - person emeraldjava; 08.01.2016
comment
OP спрашивает почему атрибут name должен присутствовать в элементе?. Таким образом, вместо ответа на фактический вопрос вы программно находите и копируете атрибут name в метод. . Совершенно бессмысленно - если у вас есть name, используйте name. В противном случае вы можете использовать метод .rules() для назначения правил с помощью id, даже несмотря на то, что уникальный name для каждого элемента поля по-прежнему является обязательным требованием для этого плагина. Однако ОП хочет знать, может ли он вообще избежать использования атрибутов name, а с этим плагином это просто невозможно. - person Sparky; 02.08.2019