it-swarm.com.de

Hinzufügen des Ziel-Leerzeichens zum Ajax-Formular basierend auf der Antwort

Ich habe mir jetzt seit ein paar Tagen die Haare ausgezogen, und ich kann scheinbar nicht so einfach so etwas erfolgreich ausführen, wenn ich mein Formular abschicke.

Was ich versuche, ist Folgendes: Wenn ich mein Formular ausfülle und es die Validierung besteht und die Ajax-Antwort per Klick verkauft wird, möchte ich, dass das Formular zu/success wechselt und einen neuen Tab/ein neues Fenster öffnet, zu dem/das geht google.com sonst gehe einfach zur fehlgeschlagenen Seite

Es ist einfach, ich weiß. Das Problem ist, dass wenn ich darauf klicke und ein neues Fenster/eine neue Registerkarte angezeigt wird, das Popup-Fenster es blockiert. Dies sagt mir, dass diese Methode nicht wirklich eine gültige Methode zum Klicken auf die Schaltfläche ist.

Dies ist, was ich als meine Form .module habe

    function storageform($form, &$form_state){

        $form['first_name'] = array(
            '#type'  => 'textfield',
            '#title' => t('First Name'),
            '#required' => TRUE,
        );

        $form['submit'] = array(
            '#type' => 'submit',
            '#value' => t('Submit'),
            '#ajax' => array(
                'callback' => 'storage_form_ajax_callback',
            ),
            '#attached' => array(
                'js' => array(
                drupal_get_path('module', 'storage_form') . '/storage_redirect.js' => array(
                'scope' => 'footer',
            ),
         ),
      ),
    );

        if(isset($form_state['values'])){
            $form['page_output'] = array(
            '#markup' => storagedb_submit($form, $form_state)
            ); 
        }
        return $form;   
    }




    /**
     ** Form Ajax
     **/
function storage_form_ajax_callback($form, $form_state) {

      $receipt_info = 'sold';

$commands = array();
      $commands[] = ajax_command_remove('div.messages');
      $commands[] = ajax_command_before('#main', theme('status_messages'));

    if(!form_get_errors()){
      $commands[] = array(
        // The command will be used in JavaScript file 
        'command' => 'storage_redirect',
        // JavaScript function:
        'itemstatus' => $receipt_info,
    );    

    }
    return array('#type' => 'ajax', '#commands' => $commands);
}

    function storage_form_ajax_callback_validate($form, $form_state){

        if($form_state['values']['first_name'] == ''){
            form_set_error('first_name', t('First name required.'));
        }
    }

storage_redirect.js

    (function($){
    Drupal.ajax.prototype.commands.payday_redirect = function(ajax, response, status){          
                if(response.leadstatus == 'sold'){
document.location.replace("http://localhost/storageform/thanks");
window.open('http://www.google.com','_blank');
                    }else{
document.location.replace("http://localhost/storageform/failed");
                }
        }
    }(jQuery, Drupal));

Bitte hilft mir jemand bei diesem kleinen Albtraum eines Problems, das ich habe. Vielen Dank.

3
Suzed

Ich glaube die Antwort ist, du kannst nicht. Die Popup-Blockierung soll verhindern, dass der Browser ein neues Fenster oder eine neue Registerkarte öffnet, wenn die Aktion nicht vom Benutzer initiiert wurde (er klickt auf einen Link). Es gibt verschiedene Möglichkeiten, ein neues Fenster oder eine neue Registerkarte zu öffnen. Wenn Sie den Browser jedoch nicht wirklich dazu verleiten können, zu glauben, dass der Benutzer tatsächlich darauf geklickt hat (nein, $(a).click() wird es nicht täuschen) oder die Popup-Blockierung des Benutzers deaktiviert ist, wird das Popup immer angezeigt Blocker macht seine beabsichtigte Pflicht.

Ich bin sicher, dass Sie dem Benutzer mitteilen, dass Sie beabsichtigen, ein anderes Fenster für ihn zu öffnen. Warum nicht einfach den Link nach erfolgreicher Formularübermittlung bereitstellen? Alternativ können Sie eine verzögerte Weiterleitung durchführen, wie sie meiner Meinung nach häufig auf phpBB-Anmeldebildschirmen zu sehen ist (diejenigen, die sagen: "Vielen Dank, dass Sie sich angemeldet haben. Sie werden in 5 Sekunden zu XXX umgeleitet").

1
Chris Rockwell

Eine Möglichkeit, den Popup-Blocker zu umgehen, besteht darin, direkt beim Klicken des Benutzers ein neues Fenster mit Inhalten wie "Warten auf Formularüberprüfung" zu öffnen. Direkte Benutzeraktionen können normalerweise neue Fenster erstellen. Wenn Ajax abgeschlossen ist, aktualisieren Sie das Fenster entweder mit dem richtigen Speicherort oder schließen Sie es einfach.

0
Mołot