1

我做了一个小部件

<?php
class CSend extends CWidget
{
    public $model;
    public function init()
    {
        $this->model = new ContactForm();
    }
    public function run()
    {
        $this->render('send', array('model' => $this->model));
    }
}

查看发送

<div class="modal-backdrope"></div>
<div class="modal">
<?php $form = $this->beginWidget('CActiveForm', array(
    'id'=>'contact-form',
    'enableClientValidation'=>true,
    'clientOptions'=>array(
        'validateOnSubmit'=>true,
        'validateOnChange' => true,
    ),
    'htmlOptions' => array('class' => 'ask_popup', 'name' => 'email-form'),
)); ?>
    <div class="result"></div>
    <h1>Povratne informacije</h1>
    <div class="modal-close"></div>

<?php echo $form->textField($model, 'name', array('class' => 'w-input inpt', 'placeholder' => 'Vaše ime')); ?>

<?php echo $form->textField($model, 'email', array('class' => 'w-input inpt', 'placeholder' => 'Vaša email adresa')); ?>

<?php echo $form->textArea($model, 'body', array('class' => 'w-input inpt', 'placeholder' => 'Vaša pitanja', 'cols' => 75, 'rows' => 5)); ?>

    <div class="w-clearfix captcha">
        <?php $this->widget('CCaptcha', array('buttonLabel' => '', 'clickableImage' => true,
            'imageOptions' => array('title' =>  'Klikni na sliku za promjenu znaka'),))?>
        <?php echo $form->textField($model,'verifyCode', array('class' => 'w-input captcha-inpt')); ?>
    </div>

<?php echo CHtml::ajaxSubmitButton('Pošaljite',array('site/send'),
    array(
        'dataType'=>'json',
        'type'=>'post',
        'success'=>'function(data) {
                                    if(data.status=="success")
                                    {
                                        $("#contact-form")[0].reset();
                                        $(".ask_popup").hide();
                                        $(".modal").prepend("<h3>Vaša poruka je poslana</h3>")
                                        setInterval(function(){
                                        $(".modal").find("h3").remove();
                                        $("#contact-form input[type=text], textarea").css("border-bottom", "solid #CCC 1px");
                                        $(".ask_popup").fadeOut();
                                        $(".modal-backdrope").fadeOut();
                                            }, 2000)
                                    }
                                    else
                                    {
                                        $("#contact-form input[type=text], textarea").css("border-bottom", "solid #CCC 1px");
                                        console.log(data);
                                        $.each(data, function(key, val) {
                                            console.log(key);
                                            $("#contact-form #"+key).css("border-bottom", "solid red 2px");
                                            });
                                    }
                                }',),
    array('class' => 'w-button submit'));?>

<?php $this->endWidget(); ?>

并在布局中调用此小部件

    </div>
    <?php $this->widget('CSend'); ?>
</body>
</html>

在这里,一个错误,firefox:看到一个“form”开始标签,但已经有一个活动的“form”元素。不允许嵌套表单。忽略标签。怎么做是错的?对不起我的英语不好。=update=我想到了另外一个关于widget的,如果是注释掉一切OK,哪里有错误?

<div class="gray">
    <?php $url = $this->getController()->createUrl('site/sc'); ?>
    <?php echo CHtml::beginForm($url, 'get'); ?>
    Security Code:
    <?php echo CHtml::textField('sc', '', array('size' => 40, 'id' => 'sc')); ?>
    <?php echo CHtml::submitButton('Get receipt', array('id' => 'send'))?>
    <?php CHtml::endForm(); ?>
</div>
4

2 回答 2

0

尝试在 CSendWidget 视图的底部添加以下代码:

<?php $form->endWidget(); ?>

您开始小部件CActiveFormbeginWidget您必须通过以下方式结束渲染此小部件endWidget

更新:

我认为您尝试在另一个表单中创建表单作为您更新的答案(HTML 中不允许这样做)。您需要它在外部创建或以一种形式添加它的字段!

于 2013-11-01T10:16:40.087 回答
0

当您在 html 中打开表单标签时会引发该错误,但没有正确关闭它并打开另一个表单标签,因此实际上嵌套了表单,这是不允许的。

因此,在您调用小部件之前,请<?php $this->widget('CSend'); ?>确保您已关闭所有表单标签,无论</form>它是普通的 html 表单还是<?php $this->endWidget(); ?>CActiveForm。

编辑:这必须在你调用你的小部件之前完成,因为我怀疑另一个表单仍然在你的页面上打开。

另外,不要忘记在您的 CSend 小部件中关闭您的表单标签/结束您的 CActiveForm 小部件,如下所示:

查看发送:

<div class="modal-backdrope"></div>
    <div class="modal">
        <?php $form = $this->beginWidget('CActiveForm', array(
            'id'=>'contact-form',
            'enableClientValidation'=>true,
            'clientOptions'=>array(
                'validateOnSubmit'=>true,
                'validateOnChange' => true,
            ),
            'htmlOptions' => array('class' => 'ask_popup', 'name' => 'email-form'),
        )); ?>
        <div class="result"></div>
        <h1>Povratne informacije</h1>
        <div class="modal-close"></div>

        <?php echo $form->textField($model, 'name', array('class' => 'w-input inpt', 'placeholder' => 'Vaše ime')); ?>
        ....
        <?php $form->endWidget(); ?> // close form/CActiveForm widget here
        ....

希望有帮助。

于 2013-11-01T10:17:21.890 回答