Мы видим странную проблему: при загрузке страницы мы добавляем дополнительный 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']);
}
Из-за моего ограниченного знания Drupal и временных ограничений; Я «решил» проблему, добавив новое правило CSS.
#quality-banner-form div.button span input.form-submit[type="submit"] {
border:none;
color:#ffffff;
text-decoration:none;
padding:5px 10px;
margin:4px 0 0 0;
background-color:#588c14;
font-size:14px;
font-size:1.4rem;
line-height:1.2em;
}
#quality-banner-form div.button span {
background: none;
color: #71A330;
}
Я все еще хотел бы знать, где генерируется дополнительный HTML, если у кого-то есть идея, пожалуйста, сообщите нам.
Других решений пока нет …