присвоение значения массива скрытому полю в jquery

#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. спасибо за предложение. Специальные символы имеют смысл, однако это ни на что не повлияло, когда я внес изменения.