【发布时间】:2016-02-15 12:00:07
【问题描述】:
我们看到一个奇怪的问题,在页面加载时,我们在表单提交按钮周围插入了额外的 html。单击按钮并触发 #element_validate 后,表单将正确显示并显示预期的 html 输出。
页面加载(在提交按钮周围添加了额外的 html 编码):
<form action="/" method="post" id="quality-banner-form" accept-charset="UTF-8">
<div>
<input type="hidden" name="actionlink" value="node/283">
<div class="form-item form-type-textfield form-item-postcode">
<label for="edit-postcode">Postcode <span class="form-required" title="This field is required.">*</span></label>
<input placeholder="Postcode" type="text" id="edit-postcode" name="postcode" value="" size="60" maxlength="128" class="form-text required uniform-input text">
</div>
<div class="button" id="uniform-edit-submit--2" style="-webkit-user-select: none;">
<span>
Go <input type="submit" id="edit-submit--2" name="op" value="Go" class="form-submit">
</span>
</div>
<input type="hidden" name="form_build_id" value="form-irh9tTAy3p22e2ZobcjpbZcG8MSctgdUI4nqzR4XlcA">
<input type="hidden" name="form_id" value="quality_banner_form">
</div>
</form>
关于 element_validate(正确的 html):
<form action="/" method="post" id="quality-banner-form" accept-charset="UTF-8">
<div>
<input type="hidden" name="actionlink" value="node/283">
<div class="form-item form-type-textfield form-item-postcode">
<label for="edit-postcode">Postcode <span class="form-required" title="This field is required.">*</span></label>
<input placeholder="Postcode" type="text" id="edit-postcode" name="postcode" value="" size="60" maxlength="128" class="form-text required error uniform-input text">
</div>
<input type="submit" id="edit-submit--3" name="op" value="Go" class="form-submit form-submit-updates">
<input type="hidden" name="form_build_id" value="form-6sZ3K4c1L0ub4tc70A8vD3liiPFBXhjxdRFhwtTu-SQ">
<input type="hidden" name="form_id" value="quality_banner_form">
</div>
</form>
在我们的 DEV 环境中,额外的 HTML 是看不到的,并且表单在页面加载和提交时按预期显示。我们比较了环境模块和模板文件,它们是相同的。
是否有我们遗漏的东西或者我们可以检查额外的 html 来自何处的其他东西?
如果需要任何其他信息来帮助诊断此问题,请告诉我。与我们无关,我是一名 .NET 开发人员。
模块文件:
function quality_banner_form($form, &$form_state, $actionLink = '')
{
$pc = @$_REQUEST['postcode'];
if (!$pc) {
$pc = @$_SESSION['postcode'];
}
$form['actionlink'] = array(
'#type' => 'hidden',
'#value' => $actionLink
);
$form['postcode'] = array(
'#type' => 'textfield',
'#title' => 'Postcode',
'#required' => true,
'#default_value' => $pc,
'#attributes' => array('placeholder' => 'Postcode'),
'#element_validate' => array('_quality_validatePostcode')
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Go'
);
return $form;
}
function _quality_validatePostcode($element, &$form_state, $form)
{
if (!preg_match('/[a-z0-9]{2,4} ?[a-z0-9]{2,4}/i', $element['#value'])) {
form_error($element, t('Invalid postcode'));
}
}
function quality_banner_form_submit($form, &$form_state)
{
if ($form_state['values']['postcode']) {
$_SESSION['postcode'] = $form_state['values']['postcode'];
}
drupal_goto($form_state['values']['actionlink']);
}
【问题讨论】:
标签: php drupal drupal-7 drupal-modules drupal-forms