插入额外HTML的奇怪形式行为

时间:2016-02-15 12:00:08

标签: php drupal drupal-7 drupal-modules drupal-forms

我们看到一个奇怪的问题,在页面加载时,我们会在表单提交按钮周围插入额外的html。单击按钮并触发#element_validate后,表单将正确显示预期的html输出。

Extra html, displays incorrectly with extra Go text Expected form look

页面加载(在提交按钮周围添加额外的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']);
}

1 个答案:

答案 0 :(得分:0)

由于我对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的生成位置,请告诉我们。