2011-01-03 20 views
9

Tôi đang cố gắng để có một nút mà không phải là một "gửi" loại nút, mà là một loại nút "bình thường", bằng cách sử dụng các hình thức api của drupal 7, nhưng tôi dường như không thể có được nó.Trong API mẫu Drupal 7 - Làm cách nào để tạo đầu vào của loại "nút" (không phải "gửi")?

Tôi đã thử nhiều thứ, như thiết lập #type thành 'button', thiết lập #button_type thành 'button' nhưng không có vấn đề gì tôi làm, drupal luôn tạo một nút kiểu "submit".

+0

này không hoạt động? http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/7#button – Kevin

+0

Không. Để trích dẫn từ trang: "Khi nhấn nút, biểu mẫu sẽ được gửi tới Drupal, nơi biểu mẫu được xác thực và xây dựng lại". – Doron

+0

Ồ. Tôi cho rằng hành vi mặc định của nó là làm cho nút trở thành một hành động, và không chỉ là một nút bấm nút. – Kevin

Trả lời

2

Bạn có thể muốn xem this issue đối với một số nền và sau đó xem xét this workaround. Bạn cũng có thể sử dụng #markup để chèn thủ công.

12

Bạn có thể sử dụng:

"#executes_submit_callback" => FALSE 

Để tắt tùy chọn "submit" bước.

Nếu bạn chỉ muốn tắt tùy chọn "xác nhận" bước, sử dụng:

"#limit_validation_errors" => array() 
+1

Đây là một giải pháp đơn giản và hiệu quả! –

1

Thêm chức năng sau đây trong tập tin template.php của mẫu của bạn.

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']) . ' />'; 
} 

và trong hình thức của bạn

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

Một rất đơn giản bên bước như sau trong mẫu của bạn

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

Và trong mẫu của mẫu của bạn:

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

Để thêm vào ví dụ trước đó của tôi - đó là phiên bản Drupal 6. Trong Drupal 7, thay đổi drupal_render để render – badzilla

0

Đôi khi chúng ta cần xác định một nút mặc định để subm nó là một biểu mẫu, nhưng tất cả các phần tử nút (#type=button, submit) trong drupal, thuộc tính TYPE luôn là "submit", vì vậy phải sửa đổi thuộc tính này thành "button" chỉ định nút mặc định mà chúng tôi cần.

  1. Hiển thị phần tử biểu mẫu và thay thế thuộc tính TYPE.

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

  2. Sửa đổi định nghĩa hình thức.

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

3

Trong Drupal 7 này có thể được thực hiện bằng cách thêm:

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

vào định nghĩa nút của bạn. Ví dụ:

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

Điều này làm việc cho ứng dụng của tôi.

tham khảo: https://www.drupal.org/node/283065 dưới Vô hiệu hóa và Buttons Overriding

Các vấn đề liên quan