2011年6月22日星期三

发现drupal button的一个bug

本来想实现一段代码:

$form['export'] = array(
      '#type' => 'button',
      '#value' => t('Export blank dealer'),
      '#attributes' => array('onclick' => 'window.location=\'/admin/build/import-dealer/export-blank-dealer\';'),
  );

发现总是不成功,试过alert('xxx'),可以实现,说明onclick事件成功了。
查看页面源码
<input type="submit" class="form-submit" onclick="window.location='/admin/build/import-dealer/export-blank-dealer';" value="Export blank dealer" id="edit-export" name="op">
明明是'#type' => 'button'怎么打出来的html是type="submit",
找下核心代码在form.inc里1937行找到theme_button函数
原来它把button的也当作submit处理,真不知道drupal的开发人员怎么想的。


原有代码:

/**
 * Theme a form button.
 *
 * @ingroup themeable
 */
function theme_button($element) {
  // Make sure not to overwrite classes.
  if (isset($element['#attributes']['class'])) {
    $element['#attributes']['class'] = 'form-'. $element['#button_type'] .' '. $element['#attributes']['class'];
  }
  else {
    $element['#attributes']['class'] = 'form-'. $element['#button_type'];
  }

  return '<input type="submit" '. (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ') .'id="'. $element['#id'] .'" value="'. check_plain($element['#value']) .'" '. drupal_attributes($element['#attributes']) ." />\n";
}

修正代码:

/**
 * Theme a form button.
 *
 * @ingroup themeable
 */
function theme_button($element) {
  // Make sure not to overwrite classes.
  if (isset($element['#attributes']['class'])) {
    $element['#attributes']['class'] = 'form-' . $element['#button_type'] . ' ' . $element['#attributes']['class'];
  } else {
    $element['#attributes']['class'] = 'form-' . $element['#button_type'];
  }
  
  return '<input type="' . $element['#type'] . '" ' . (empty($element['#name']) ? '' : 'name="' . $element['#name'] . '" ') . 'id="' . $element['#id'] . '" value="' . check_plain($element['#value']) . '" ' . drupal_attributes($element['#attributes']) . " />\n";
}

很简单,就是把return部分的type="submit"改成type="' . $element['#type'] . '"
查看页面源码
<input type="button" class="form-submit" onclick="window.location='/admin/build/import-dealer/export-blank-dealer';" value="Export blank dealer" id="edit-export" name="op">

试试onclick,OK成功!

没有评论:

发表评论

上海松善实业有限公司

    上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。     主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...