#jquery #hidden-field
#jquery #скрытое поле
Вопрос:
Уверен, что я упускаю что-то простое здесь. Я пытаюсь присвоить значение скрытому полю с помощью jquery. Он продолжает ничего не возвращать, и я попробовал несколько способов. У меня есть массив в форме с именем personemail[], и он соответственно идентифицирует и именует поля: personemail [0], personemail [1] и т.д., И я хочу извлечь первый указанный адрес электронной почты и назначить его скрытому полю с именем person_email.
<script type="text/javascript" charset="utf-8">
jQuery(document).ready(function() {
var emailvalue = jQuery('#personemail[0]').val();
jQuery('#person_email').val(emailvalue);
});
</script>
Я новичок в jquery, поэтому остается загадкой, чего мне не хватает. нужно ли мне использовать .change() для #emailperson[]? Я предполагаю, что мне нужно взломать массив, чтобы получить значение, но я не уверен, как это сделать. Я просто не могу заставить эту часть работать.
Вот данные post
Array ( [person_name] => max
[person_email] =>
[person_phone] => 111-1111
[booking_seats] => 1
[personname] => Array ( [0] => max )
[personemail] => Array ( [0] => max@max.com )
[booking_comment] =>
[eventAction] => add_booking
[event_id] => 14 )
Как вы можете видеть, я просто отлично получаю адрес электронной почты в массив, я просто не могу заставить его привязываться к person_email
Вот запрошенная сопряженная версия HTML, язык на стороне сервера — php. Входные данные генерируются с помощью функции-клона jquery, которую я написал. Выдает HTML-элемент для каждого нового пользователя на основе выпадающего списка для количества выбранных пользователей:
<form id='rsvp-form' name='booking-form' method='post' action='<?php echo $destination ?>'>
<tr class="personrow">
<th scope="row"></th><td>Name:<br><input class="required person" type="text" name="personname[0]" /><br>Email:<br><input class="required email additional" type="text" name="personemail[0]" id="personemail[0]" /></td><td class="theextra"></td>
</tr>
<input type='hidden' name='person_email' id='person_email' />
<input type='submit' class='blkBTN' value='<?php _e('Book It!', 'dbem') ?>'/>amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;
<input type='hidden' name='eventAction' value='add_booking'/>
<input type='hidden' name='event_id' value='<?php echo $EM_Event->id; ?>'/>
Спасибо
Комментарии:
1. Как выглядит ваш HTML-код?
2. как выглядит этот массив в форме? отдельные текстовые поля?
3. какой язык на стороне сервера??? а также показать HTML-код, прочитайте это: api.jquery.com/hidden-selector это может помочь вам
Ответ №1:
Мне кажется, что вы пытаетесь получить входные данные в документе готовыми — до того, как он был отправлен. В этот момент в поле ввода нет ничего для чтения. Что я бы сделал, так это сделал это при отправке, что-то вроде этого
$("#rsvp-form").submit(function(event){
event.preventDefault(); //stop the form from submitting, you'll do it later
var emailvalue = $("personemail\[0\]").val();
$("#person_email").val(emailvalue);
$("#rsvp-form").submit(); //you got the hidden input value, now submit the form
});
Вот пример jsfiddle http://jsfiddle.net/x6dPd /
редактировать: в примере была опечатка.
Комментарии:
1. Это вызывает ошибку рекурсии в .submit(); в функции отправки. Это просто перебор, остановка отправки, установка значения снова и снова. Каков был бы наилучший метод для избежания preventDefault после установки значения? Возможно, функция для preventdefault, привязанная к отправке, которую затем можно отменить после изменения значения?
2. Я собираюсь принять это как ответ и начать новый вопрос, связанный с рекурсией, поскольку это действительно другая проблема, чем та, которая у меня была изначально. Спасибо!
Ответ №2:
Вы должны избегать скобок в вашем селекторе (с обратной косой чертой), потому что скобки являются специальными символами в селекторах jquery. Итак, у вас должно быть:
var emailvalue = jQuery('#personemail\[0\]').val();
Надеюсь, это поможет. Приветствия.
Комментарии:
1. спасибо за предложение. Специальные символы имеют смысл, однако это ни на что не повлияло, когда я внес изменения.