【问题标题】:Can I make the second or later button in a Drupal form the default button?我可以将 Drupal 表单中的第二个或以后的按钮设为默认按钮吗?
【发布时间】:2011-11-16 16:16:51
【问题描述】:

我在使用表单 API 构建的自定义 Drupal 6 模块中有一个表单,它在列表中有 1 个或多个 image_button 元素,后跟保存和取消按钮。

单击图像和标准按钮时一切正常,它们调用了它们应该调用的提交函数,但是如果我在表单中的任何文本字段中点击 [ENTER] 键,表单中的第一个按钮就会被提交,不幸的是,在这种情况下,它是列表中的一个 image_button 而不是 Save 按钮。

这是 Web 表单的标准问题,您通常必须在表单定义的早期使用隐藏(按样式和/或大小)按钮,以确保调用默认提交路径(在这种情况下,这就是 Save按钮将调用)而不是您希望成为默认按钮之前的按钮的提交路径。

是否有一些 Drupal 6 魔术可以设置默认按钮,无论它在我未能在文档中找到的表单定义中的哪个位置,或者我应该创建一个样式为不可见的幻像提交按钮?

提前感谢您的任何回答。

【问题讨论】:

    标签: drupal drupal-6 drupal-forms


    【解决方案1】:

    尝试将'#weight' 放在您的按钮上。

    【讨论】:

    • 我尝试以各种方式使用“#weight”,但它所做的只是影响元素在表单中结束的位置,这无法解决按下时第一个按钮是默认按钮的问题[输入]。
    【解决方案2】:

    答案是否定的,没有内置的 Drupal 方法可以解决按 [ENTER] 时表单中的第一个按钮是默认按钮的问题。

    这是我必须做的。

    我在表单顶部创建了一个额外的提交按钮:

    // A submit button that needs to be hidden, it'll be the default rather than one from the list.
    $form['hidden-submit'] = array(
      '#type' => 'submit',
      '#value' => 'Save',
      '#attributes' => array('class' => 'hidden-default-submit'),
    );
    

    在页面包含的 CSS 中,我添加了以下带和大括号 CSS,以在我可以测试的尽可能多的网络浏览器中隐藏额外的提交按钮:

    .hidden-default-submit {
      position: absolute;
      left: -2000;
      top: -2000;
      width: 0;
      height: 0;
      border: 0;
      margin: 0;
      padding: 0;
    }
    

    【讨论】:

      【解决方案3】:

      您可以通过为每个提交按钮分配不同的名称轻松地做到这一点

      【讨论】:

        猜你喜欢
        • 2019-04-20
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 2011-08-20
        • 2011-09-15
        相关资源
        最近更新 更多