циклический просмотр элементов с помощью jQuery на основе атрибута name, а не id - PullRequest
4 голосов
/ 25 августа 2009

Спасибо, что нашли время, чтобы прочитать это.

У меня есть неизвестное количество (динамически вставленных) элементов ввода в форме, к каждому из которых я хочу прикрепить виджет DatePicker, включенный в пользовательский интерфейс jQuery.

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

Обычно я, вероятно, просто делал бы что-то вроде:

$("input.date-pick").each(function(){
    $(this).datepicker({dateFormat: "yy-mm-dd"});
});

Однако в коде, с которым я работаю, элементы ввода не имеют уникальных идентификаторов, пока данные формы не сохранены (что-то, что я не могу изменить), хотя они имеют уникальное имя значения атрибутов в формате name="field_id_x[y][z]", которые при сохранении формы преобразуются в идентификатор формата id="field_id_xyz".

Итак, мой вопрос: может ли кто-нибудь показать мне, как перебрать все входные элементы с помощью класса «date-pick», основанного на значениях их атрибутов name?

(PS Также стоит упомянуть, что количество подходящих элементов ввода в форме может быть увеличено / уменьшено пользователем на лету.)

Ответы [ 3 ]

3 голосов
/ 25 августа 2009

Ваш код должен работать как есть. Тем не менее, вы можете перебрать по имени, как это:

$("input[name*='field_id_'].date-pick").each(function(){
   $(this).datepicker({dateFormat: "yy-mm-dd"});
});
3 голосов
/ 25 августа 2009

Средство выбора даты не нуждается в элементах, чтобы иметь идентификатор. Вы уже ищете элементы для этого. Это должно работать:

$('input.date-pick').datepicker({dateFormat: "yy-mm-dd"});

Обратите внимание, что вам даже не нужен вызов each.

Полный пример:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>DatePicker Test Page</title>
<script type="text/javascript" src="http://jqueryui.com/latest/jquery-1.3.2.js"></script>
<script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.core.js"></script>
<script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.datepicker.js"></script>
<script type='text/javascript'>
$(function() {
    $('.dp').datepicker();
});
</script>
</head>
<body>
<hr />
<input class='dp' type='text'>
<input class='dp' type='text'>
<input class='dp' type='text'>
</body>
</html>
0 голосов
/ 31 января 2012

вы пробовали что-то вроде

var namefield = "field_id_"
$("date-pick").each(function(index, element) {
  if ($(element).attr("name").substr(0,namefield.length) == namefield) {
    // code to process
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...