Форма отправки javascript не работает в Chrome - PullRequest
5 голосов
/ 20 июля 2011

У меня есть следующий HTML:

<body>
<form action="site1">
    <input type="image" name="submit" border="0" src="images/front/search_travel.png" alt=""  onclick="provider_popup();"/>
</form>

<form  name="frmRight1"  action="site2" target="_blank" >
    <input type="hidden" name="sector_id" id="sector_id" value="90" />
    <input type="submit" style="visibility:hidden;" />
 </form>

 <script type="text/javascript">
 function provider_popup (){
        document.frmRight1.submit();
        return false;
  } 
</script>
</body>

И пока я отправляю кнопку с именем submit, я получаю одну вкладку, и она загружает 'site2'

Но этот процесс не работает в Chrome.

Дайте мне знать причину

Ответы [ 5 ]

4 голосов
/ 20 июля 2011

Хорошо, вам также нужно запретить кнопке изображения отправлять свою форму.Ваша функция вернула false, но вам нужно вернуть это на onclick, отсюда и проблема.Сделайте это так:

onclick="return provider_popup();"

Я все равно рекомендую отказаться от подхода <input type="image"> и использовать чистый элемент с атрибутом onclick.Делает ваш HTML намного проще, т.е.

<body>
    <img src="images/front/search_travel.png" alt="Submit" onclick="provider_popup();" />

    <form  name="frmRight1"  action="site2" target="_blank" >
        <input type="hidden" name="sector_id" id="sector_id" value="90" />
        <input type="submit" style="visibility:hidden;" />
    </form>

     <script type="text/javascript">
     function provider_popup () {
            document.forms['frmRight1'].submit();
      } 
    </script>
</body>

Другая альтернатива - обернуть изображение в привязку <a href... и применить к нему onclick.

1 голос
/ 12 сентября 2013

У меня была такая же проблема. Взял меня весь день. В моем случае проблема с Chrome заключалась в том, что Chrome блокировал мои действия и заявлял, что Chrome блокирует всплывающие окна. Вот код, который я использовал для решения этой проблемы:

/** This is the script that will redraw current screen and submit to paypal. */
echo '<script>'."\n" ;
echo 'function serverNotifySelected()'."\n" ;
echo '{'."\n" ;
echo '    window.open(\'\', \'PayPalPayment\');'."\n" ;
echo '    document.forms[\'paypal_form\'].submit();'."\n" ;
echo '    document.forms[\'server_responder\'].submit();'."\n" ;
echo '}'."\n" ;
echo '</script>'."\n" ;

/** This form will be opened in a new window called PayPalPayment. */
echo '<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" name="paypal_form" method="post" target="PayPalPayment">'."\n" ;
echo '<input type="hidden" name="cmd" value="_s-xclick">'."\n" ;
echo '<input type="hidden" name="custom" value="'.$transaction_start.'">'."\n" ;
echo '<input type="hidden" name="hosted_button_id" value="'.$single_product->hosted_button_id.'">'."\n" ;
echo '<table>'."\n" ;
echo '    <tr>'."\n";
echo '        <td><input type="hidden" name="'.$single_product->hide_name_a.'" value="'.$single_product->hide_value_a.'">Local</td>'."\n" ;
echo '    </tr>'."\n" ;
echo '    <tr>'."\n" ;
echo '        <td>'."\n" ;
echo '        <input type="hidden" name="'.$single_product->hide_name_b.'" value="'.$single_product->hide_value_b.'" />'.$single_product->short_desc.' $'.$adj_price.' USD'."\n" ;
                // <select name="os0">
                //     <option value="1 Day">1 Day $1.55 USD</option>
                //     <option value="All Day">All Day $7.50 USD</option>
                //     <option value="3 Day">3 Day $23.00 USD</option>
                //     <option value="31 Day">31 Day $107.00 USD</option>
                // </select>
echo '        </td>'."\n" ;
echo '    </tr>'."\n" ;
echo '</table>'."\n" ;
echo '<input type="hidden" name="currency_code" value="USD">'."\n" ;
echo '</form>'."\n" ;

/** This form will redraw the current page for approval. */
echo '<form action="ProductApprove.php" name="server_responder" method="post" target="_top">'."\n" ;
echo '<input type="hidden" name="trans" value="'.$transaction_start.'">'."\n" ;
echo '<input type="hidden" name="prod_id" value="'.$this->product_id.'">'."\n" ;
echo '</form>'."\n" ;

/** No form here just an input and a button.  onClick will handle all the forms */
echo '<input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" alt="PayPal - The safer, easier way to pay online!" onclick="serverNotifySelected()">'."\n" ;
echo '<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">'."\n" ;

Этот код не отображается как всплывающее окно в Chrome. Это код только для одной кнопки. Когда кнопка нажата, она меняет текущий экран на предварительное одобрение И открывает новую страницу для заполнения PayPal.

Что я обнаружил, так это то, что если новое окно открывается С нажатием кнопки, то Chrome не рассматривает его как всплывающее окно. Если вы попытаетесь открыть это новое окно с помощью таймера, то Chrome воспринимает открытие окна по времени как всплывающее окно.

0 голосов
/ 20 июля 2011

Хорошо, ваша необходимость одновременно отправить обе формы не была ясна. Это было сложно. Единственный способ найти это - ввести небольшое время ожидания:

<script type="text/javascript">
function provider_popup (){
  document.forms['frmRight1'].submit();
  setTimeout("doPost()", 10);
  return false;
}

function doPost()
{
    document.forms[0].submit();
}  
</script>
0 голосов
/ 20 июля 2011

Заменить

document.frmRight1.submit();

на

document.forms["frmRight1"].submit();
0 голосов
/ 20 июля 2011

document.frmRight1 будет работать только в некоторых браузерах.

попробовать

document.forms['frmRight1'] вместо.

В качестве альтернативы укажите форму id как <form id="frmRight1" name... и обратитесь к ней через document.getElementById('frmRight1').

См. Это для получения дополнительной информации о свойствах document: http://www.w3schools.com/jsref/dom_obj_document.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...