【问题标题】:Joomla form validation missing error messageJoomla 表单验证缺少错误消息
【发布时间】:2013-01-31 07:59:01
【问题描述】:

我正在尝试为 Joomla 开发我的第一个组件。我已经安装了 Joomla 3,一切都很顺利。

我想在前端添加一个表单验证(客户端),我有一个提交表单。

我的代码是:

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');

// Add form validation
JHTML::_('behavior.formvalidation');
?>
<form class="form-validate" id="myForm" method="post">
   <input name="email" type="text" class="required validate-email" size="30" />
   <button type="submit" class="validate">Submit form</button>
</form>

验证有效,但不显示任何消息错误 - 只是一个字段。错误字段的 HTML 是:

<div id="system-message-container">
   <div id="system-message" class="alert alert-error">
      <h4 class="alert-heading"></h4>
      <div></div>
   </div>
</div>

那么,如何在验证中添加文本?我需要为我的组件创建语言文件吗?

【问题讨论】:

    标签: forms validation joomla


    【解决方案1】:

    您需要将表单提交按钮更改为input 试试这个-

    <?php
    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');
    
    // Add form validation
    JHTML::_('behavior.formvalidation');
    ?>
    <form class="form-validate" id="myForm" method="post">
       <input name="email" type="text" class="required validate-email" size="30" />
      <input type="submit" name="submit" value="Submit" />
    </form>
    

    更新:- 你也可以试试这个-

    <?php
    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');
    
    // Add form validation
    JHTML::_('behavior.formvalidation');
    ?>
    <form name="adminForm" id="myForm" method="post" onsubmit="return submitbutton();">
       <input  id="email" name="email" type="text" class="required validate-email" size="30" />
       <button type="submit" class="validate">Submit form</button>
    </form>
    <script type="text/javascript">
    /* Override joomla.javascript, as form-validation not work with ToolBar */
    function submitbutton() {   
        var f = document.adminForm;
        if (document.formvalidator.isValid(f)) {
            document.adminForm.submit(); 
            return true;
        }
        else {
            var msg = new Array();
            msg.push('Invalid input, please verify again!');           
            if($('email').hasClass('invalid')){
                msg.push('<?php echo JText::_('Invalid Email')?>');
            }
            alert (msg.join('\n'));
            return false;
        }     
    }
    </script>
    

    这将在客户端验证表单,但不在服务器端验证。 欲了解更多信息,请查看 - http://docs.joomla.org/Form_validation

    【讨论】:

    • docs.joomla.org/Client-side_form_validation 上的文档声明我需要使用
    • @user2075107:你试过我的建议了吗?
    • 是的,我做到了。然后,表单甚至不会合并(我认为这是一些 jquery 错误)。如果我使用
    • 您所指的文档不提供消息功能。错误容器会在服务器端错误的情况下给出错误。我已经更新了代码。可能会对您有所帮助。
    • 太棒了!那行得通...而且我只是修改了脚本,所以我添加了以下内容,而不是警报框: document.getElementById('system-message').innerHTML = msg.join('\n');所以现在,它会在顶部打印错误!伟大的!非常感谢您的时间和帮助! :)
    【解决方案2】:

    还要确保您已在 index.php 中添加此代码

    <jdoc:include type="message" />
    

    【讨论】:

      【解决方案3】:

      我刚刚遇到了这个问题。问题是您没有与表单字段关联的标签,Joomla 验证代码从标签文本构建错误消息。

      如果您不希望标签出现,请将其设置为隐藏(如果您使用引导程序,请使用隐藏类)。您必须在标签中添加一个 for 子句。如果你还给它一个 id,它是输入 id + '-lbl' 的集合,那么它将优化标签查找的速度。

      <form class="form-validate" id="myForm" method="post">
          <label class="hidden" for="inputid" id="inputid-lbl">Form label</label>
          <input id="inputid" name="email" type="text" class="required validate-email" size="30" />
          <button type="submit" class="validate">Submit form</button>
      </form>
      

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 2012-06-04
        • 1970-01-01
        • 1970-01-01
        • 2017-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多