2013-04-25 3 views
0

У меня есть this checkout page (вам нужно будет добавить элемент), который использует JavaScript/jQuery в this jsFiddle, чтобы отобразить/скрыть некоторые поля для отдельного адреса доставки. Когда вы показываете, я устанавливаю значение всех полей в '', а при скрытии устанавливаю значения полей в соответствии с их полями в биллинговой форме..val stop form from working

Когда вы отправляете форму, вы должны быть отправлены на экран входа в PayPal (попробуйте заполнить форму без переключения другого почтового адреса и отправки), но если вы перейдете на адрес доставки, он просто вернется на ту же страницу.

Я достаточно отлаживаю, чтобы знать, что он изменяет поля .val(), нарушающие форму. Если я прокомментирую эти биты и вручную переключу видимость с помощью инструментов dev, или если я заполню форму фактуры и никогда не показываю/скрываю доставку (так .val() никогда не вызывается), все работает нормально.

Если вы собираетесь посмотреть эту страницу и попробовать, вы знаете ее успешное, если вы попадете на экран PayPal, иначе он просто вернется на ту же страницу (действие формы на той же странице , но я не могу найти ничего, что обрабатывает данные - полная страница PHP можно найти here - это модифицированная версия WPEC's shopping cart page

Здесь есть (большинство) соответствующего JavaScript:

$('#reveal-shipping').click(function(){ 
     if ($('.wpsc_checkout_table.table-2').is(':animated')) return; 
     if($('.wpsc_checkout_table.table-2').css('display') == 'none'){ 
      $('.wpsc_checkout_table.table-2').slideToggle(); 
      $('.wpsc_checkout_table.table-2').find('input, select, textarea').val(''); 
      document.getElementById('reveal-shipping').innerHTML = 'Ship to my billing address ←'; 
     } else { 
      for (i=0; i < fields.length; i++){ 
       thisval = $(fields[i][0]).val(); 
       $(fields[i][1]).val(thisval); 
      } 
      $('.wpsc_checkout_table.table-2').slideToggle(); 
      document.getElementById('reveal-shipping').innerHTML = 'Ship to a different address &rarr;'; 
     } 
    }); 

Вы можете найти остальное на the jsFiddle и на the page itself

Большое спасибо за любую помощь, я действительно застрял на этом!

+0

Просто чтобы быть ясно: проблема заключается в том, что поля адрес доставки не отправляются, когда пользователь не выбрать другой адрес доставки? – jah

+0

Нет. Когда вы отправляете форму, вы должны перенаправить ее на экран входа в PayPal. Если вы переключите другой адрес доставки, а затем отправьте форму, она просто вернется на ту же страницу. – Bill

ответ

1

Я думаю, что проблема заключается в том, что вы используете дисплей: нет, чтобы скрыть «другой адрес доставки». Когда поле ввода имеет отображение none, оно не будет отправлено с вашей формулой. И из-за этого он перенаправляет вас обратно на страницу проверки.

Вы можете использовать видимость: скрытый, но тогда это все равно займет место.

Но я настоятельно рекомендую вам не делать этого таким образом, потому что если пользователь отключил javascript, это не сработает. Вы должны отправить все поле и в php, проверьте, были ли отправлены разные поля адреса, и если они есть, используйте их.

Edit: Вы можете использовать положение, чтобы поместить их за пределы окна, как:

position:absolute; 
top: -9999px; 
visibility:hidden; 
+0

. Я не думаю, что это проблема - по трем причинам: эта таблица начинает видна и переключается после загрузки страницы (в в случае, если пользователь отключил js), также комментируя строки .val() 'кода make make, форма, представляющая работу отлично, а также форма отправляется правильно, даже если эти поля скрыты. – Bill

+0

В чем причина настройки значение полей формы, которые не отображаются и поэтому не отправлены? – jah

+0

Вы уверены, что они не отправлены? Я делал это так, чтобы они были представлены с теми же значениями, что и биллинговая форма (как и должно быть, если она скрыта) – Bill