2011-07-19 8 views
5

Tengo el siguiente código HTML:Javascript forma de presentar no funciona en cromo

<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> 

Y mientras que presento el botón con el nombre submit, conseguir uno otra pestaña y cargará 'sitio2'

Pero este proceso no está funcionando en Chrome.

me dejó saber el motivo

Respuesta

4

bien, también para prevenir el botón de imagen a partir de la presentación de su forma . Su función devolvió falsa, pero debe devolverla al onclick, de ahí el problema. Hacerlo de esta manera:

onclick="return provider_popup();"

le recomiendo que zanja el enfoque <input type="image"> todos modos, y uso un elemento puro con un atributo onclick. Hace que su HTML mucho más simple decir

<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> 

Otra alternativa es envolver la imagen en un ancla <a href... y aplicar la onclick a eso.

+0

No, en realidad tengo que enviar los dos formularios, es decir, el primero y el nombre = "frmRight1" – Linto

+0

¡De acuerdo, vea mi tercera respuesta final! –

+0

Tuvo el problema, para enviar el formulario con Firefox y Chrome. Pero después de especificar el formulario específico por nombre, todo funciona bien. Gracias –

0

document.frmRight1 sólo funciona en algunos navegadores.

tratar

document.forms['frmRight1'] lugar.

O bien, proporcione el formulario id como <form id="frmRight1" name... y consúltelo a través del document.getElementById('frmRight1').

ver este para obtener más información sobre las propiedades de la document: http://www.w3schools.com/jsref/dom_obj_document.asp

+0

Todavía, no funciona – Linto

+0

Ver mi otra respuesta. –

0

Reemplazar

document.frmRight1.submit(); 

con

document.forms["frmRight1"].submit(); 
+0

todavía, no funciona – Linto

0

De acuerdo, su necesidad de enviar ambos formularios simultáneamente no estaba clara. Esto fue complicado. La única forma que encontré para hacerlo fue introducir un pequeño tiempo de espera:

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

function doPost() 
{ 
    document.forms[0].submit(); 
} 
</script> 
1

Tuve el mismo problema. Me llevó todo el día. En mi caso, el problema con Chrome era que Chrome estaba bloqueando mis acciones y afirmaba que Chrome estaba bloqueando las ventanas emergentes. Aquí está el código que solía resolver:

/** 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" ; 

Este código no aparece como una ventana emergente en Chrome. Es el código para un solo botón. Cuando se presiona el botón, cambia la pantalla actual a preaprobación Y abre una nueva página para que PayPal la llene.

Lo que descubrí es que si la nueva ventana se abre CON un botón, entonces Chrome no lo trata como una ventana emergente. Si intenta abrir esa nueva ventana con un temporizador, Chrome trata la ventana cronometrada que se abre como una ventana emergente.

Cuestiones relacionadas