2011-01-03 7 views
9

Ich versuche, eine Schaltfläche zu haben, die nicht ein "Senden" Typ der Schaltfläche ist, sondern eher eine normale "Schaltfläche" Typ, mit den Formen API von Drupal 7, aber ich kann nicht scheinen, es zu bekommen.In Drupal 7 Formular API - Wie erstelle ich eine Eingabe vom Typ "Button" (nicht "abschicken")?

Ich habe viele Dinge ausprobiert, wie #type auf 'button' setzen, #button_type auf 'button' setzen, aber egal was ich mache, drupal erzeugt immer eine Schaltfläche vom Typ "submit".

+0

Dies funktioniert nicht? http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/7#button – Kevin

+0

Nein. Um von der Seite zu zitieren: "Wenn die Schaltfläche gedrückt wird, wird das Formular an Drupal übergeben, wo es validiert und neu erstellt wird." – Doron

+0

Oh. Ich nehme an, dass sein Standardverhalten darin besteht, die Schaltfläche zu einer Aktion zu machen und nicht nur zu einer Schaltfläche. – Kevin

Antwort

2

Sie können für einen Hintergrund this issue auschecken und dann this workaround betrachten. Sie können möglicherweise auch #markup verwenden, um es manuell einzufügen.

12

können Sie verwenden:

"#executes_submit_callback" => FALSE 

das "Eintragen" Schritt zu deaktivieren.

Wenn Sie nur die „Validierung“ Schritt, Verwendung zu deaktivieren:

"#limit_validation_errors" => array() 
+1

Das war so eine einfache und effektive Lösung! –

1

Fügen Sie die folgende Funktion in Ihrer Vorlage der template.php Datei.

function templatename_button($variables) { 
    $element = $variables['element']; 
    $type = strtolower($element['#button_type']); 
    switch($type){ 
    case 'submit': 
    case 'reset': 
    case 'button': 
     break; 
    default: 
     $type = 'submit'; 
     break; 
    } 
    $element['#attributes']['type'] = $type; 

    element_set_attributes($element, array('id', 'name', 'value')); 

    $element['#attributes']['class'][] = 'form-' . $element['#button_type']; 
    if (!empty($element['#attributes']['disabled'])) { 
    $element['#attributes']['class'][] = 'form-button-disabled'; 
    } 

    return '<input' . drupal_attributes($element['#attributes']) . ' />'; 
} 

und in der Form

$form['mybutton'] = array(
    '#type' => 'button', 
    '#value' => t('mytext'), 
    '#button_type' => 'button', 
); 
2

Eine sehr einfache Seiten Schritt ist die folgende in Ihrer Form

$form['your-form-element'] = array(
    '#type' => 'button', 
    '#name' => 'any-name', 
    '#value' => t('Button Text'), 
); 

Und in Vorlage, um Ihre Form ist:

print str_replace('type="submit"', 'type="button"', drupal_render($form['your-form-element'])); 
+0

Um zu meinem früheren Beispiel hinzuzufügen - das ist die Drupal 6 Version. Ändern Sie in Drupal 7 den zu rendernden drupal_render – badzilla

0

Irgendwann müssen wir eine Standardschaltfläche definieren, um subm zu definieren es ein Formular, aber alle Schaltflächenelemente (#type=button, submit) in Drupal, das TYPE Attribut ist immer "submit", so muss dieses Attribut zu "button" ändern, die eine Standardschaltfläche angeben, die wir benötigten.

  1. Rendern Sie das Formularelement und ersetzen Sie das TYPE-Attribut.

    echo strtr(drupal_render($form['btn']), array('type="submit"' => 'type="button"'));

  2. die Formulardefinition ändern.

    form['btn']['#attributes'] = array('onclick' => 'this.type="submit"');

3

In 7 Drupal dies durch Zugabe durchgeführt werden kann:

'#attributes' => array ('OnClick' => 'return (false);'),

zu Ihrer Schaltfläche Definition. Zum Beispiel:

$form['my_form'] = array(
'#type' => 'button', 
'#attributes' => array('onclick' => 'return (false);'), 
'#value' => t('My Button'), 
'#prefix' => t('<div class="myButton">'), 
'#suffix' => t('</div>') 
); 

Dies funktionierte für meine Anwendung.

Referenz: https://www.drupal.org/node/283065 unter Deaktivieren und Übergeordnete Buttons