【问题标题】:How to submit a form in Semantic UI?如何在语义 UI 中提交表单?
【发布时间】:2013-10-20 20:08:25
【问题描述】:

我知道如何使用Semantic UI 验证表单,甚至可以在控制台中读取消息“表单没有验证错误,正在提交”。但是,这是提交到哪里?我想实际提交表单,但语义 UI 的布局方式我似乎无法指定提交到哪里或任何东西。

我读过 this tutorial,但它使用 Angular 进行提交,而不仅仅是语义 UI。

我在这里错过了一些非常简单的东西吗?

【问题讨论】:

  • 您是否尝试过阅读他们自己的相关文档??
  • 你的表单没有调用相关php函数/文件的“action”属性吗?
  • @AfzaalAhmadZeeshan 我已经阅读了他们的文档,但据我所知,没有关于提交的文档。有关于验证数据的文档,但没有关于提交的具体内容。 link 说“提交”提交一个选定的表单,但没有实际解释它提交到哪里。
  • @Sebsemillia 我希望。 Semantic UI 的构建方式,它们不使用 HTML 表单元素。

标签: javascript html forms semantic-ui


【解决方案1】:

你可以使用jQuery的ajax:

   //Get value from an input field
   function getFieldValue(fieldId) { 
      // 'get field' is part of Semantics form behavior API
      return $('.ui.form').form('get field', fieldId).val();
   }

   function submitForm() {
      var formData = {
          field1: getFieldValue('someId')
      };

      $.ajax({ type: 'POST', url: '/api/someRestEndpoint', data: formData, success: onFormSubmitted });
   }

   // Handle post response
   function onFormSubmitted(response) {
        // Do something with response ...
   }

编辑:另外,您可以使用表单的 onSuccess 方法来运行 submitForm 函数,即当您初始化表单时:

$('.ui.form').form(validationRules, { onSuccess: submitForm });

onSuccess 仅在单击“提交”按钮并且表单根据您指定的规则有效时才会被调用。

编辑:如果您想要常规的 HTML 表单行为,您需要将语义 css 类添加到 form 标记。

<form class="ui form" method="POST" action="/signup">...</form>

然后您使用 jQuery 设置验证规则。这将为您提供默认的 HTML 表单行为,即当您点击提交按钮时,它会在上述情况下向 /signup 发出 POST 请求。如果您的任何规则触发,则会阻止提交,直到没有验证错误为止。

【讨论】:

  • 作为网络上唯一可以找到使用 onSuccess 回调示例的地方,做得很好。
  • "onSuccess 仅在单击“提交”按钮并且表单根据您指定的规则有效时才会被调用” - 这将是完美的,但在页面加载时调用 onSuccess 而不是单击按钮时。有什么线索吗?
  • @silverdr 这个我也看到了,好像不用等验证了!
【解决方案2】:

使用原提交按钮但添加语义按钮样式:

<input type="submit" value="Submit" class="ui button" />
<input type="submit" value="Submit" class="ui teal button big"/>

【讨论】:

  • 您知道如何在该输入中添加图标吗?比如:&lt;i class="sign in icon"&gt;
  • 他们的教程从未在示例中提到这一点!!
  • 如果您使用文档就绪validationRules() 实现,这不起作用,因为它会自动提交页面。
  • @Niklas - 你不能将 HTML 放在 &lt;input/&gt; 中,但是你可以使用 &lt;button type="submit" class="ui button"&gt;&lt;i class="sign in icon"&gt; Sign in&lt;/button&gt;。这也将提交表单,但我认为它可能不适用于旧版浏览器。
【解决方案3】:

语义 UI 有自己的 API 来提交表单。例如:

$('.ui.form .submit.button')
.api({
    url: 'server.php',
    method : 'POST',
    serializeForm: true,
    beforeSend: function(settings) {
    },
    onSuccess: function(data) {
    }
});

【讨论】:

  • 如果要先运行表单验证模块怎么办?
  • @Billybobbonnet 肯定一直都是!
  • @Billybobbonnet,在这种情况下,您应该在 .form 部分添加验证。
  • 对我来说这是最好的方法,我们将使用内置函数。
【解决方案4】:

最简单的方法是使用以下代码改造标准 HTML 表单。

从一个带有提交按钮的基本工作标准 HTML 表单开始,这将获取您的值并将它们发布到您的表单目的地,在您的表单提交按钮下方返回输出。

  1. 现在是仔细检查您是否成功链接到 jquery、语义 javascript 和语义 css 的好时机。

  2. 将 class="ui form" 添加到您的表单标签。

  3. 在下面添加 javascript。

.

$(document).ready(function() {

// validation 
 $('.ui.form').form({
    email: {
      identifier : 'email',
      rules: [
        {
          type   : 'email',
          prompt : 'Please enter an email'
        }
      ]
    }
},
{
    inline: true,
    on: 'blur',
    transition: 'fade down', 
    onSuccess: validationpassed
});

// called if correct data added to form 
function validationpassed() {

    // Multiple instances may have been bound to the form, only submit one.
    // This is a workaround and not ideal. 
    // Improvements welcomed. 

    if (window.lock != "locked") { 
        var myform = $('.ui.form');
        $.ajax({
            type: myform.attr('method'),
            url: myform.attr('action'),
            data: myform.serialize(),
            success: function (data) {
                //if successful at posting the form via ajax.
                myformposted(data);
                window.lock = "";
            }
        });
    } 
    window.lock = "locked";
}

// stop the form from submitting normally 
$('.ui.form').submit(function(e){ 
    //e.preventDefault(); usually use this, but below works best here.
    return false;
});




function myformposted(data) { 
    // clear your form and do whatever you want here 
    $('.ui.form').find("input[type=text], textarea").val("");
    //$('.ui.submit.button').after("<div>Message sent. Thank you.</div>");
    $('.ui.submit.button').after(data);
} 

});

基本形式:

    <form action="process.php" method="post" class="ui form">
    <div class="field">
    <label>title</label>
        <input name="email" type="text">
    </div> 
    <input type="submit" class="ui button"/>
    </form>

如果您希望错误消息显示在一个框中而不是表单本身中,请将其包含在您的表单中,并删除“inline: true”字样,剩下的就是 Semantic UI:

<div class="ui info message"></div>

注意:在语义 UI 中使用表单标签并不是绝对必要的,因为您只需要一个带有“ui form”类的 div,但是这个改造代码确实需要一个表单标签。

【讨论】:

    【解决方案5】:

    如果你不想使用 ajax 怎么办?!

    使用这个:

    $( "#reg_btn" ).click(function(event){
        event.preventDefault();
        $('#register_form').submit();
    
    });
    

    在这种情况下你可以使用&lt;button&gt;标签...没有必要使用经典标签代替

    【讨论】:

    • 没有ajax提交的可以简单的去掉onSuccess部分包括函数
    【解决方案6】:

    语义 UI 基于 jQuery 和 CSS,因此如果您想提交表单数据,您可以通过以下方式进行:

    1. 使用 AJAX 发送表单数据

    2. 使用一些jqQuery插件,比如this

    3. 诡计!

      放置一个提交按钮并将其显示设置为无。当用户单击div 按钮时,将该事件抛出到提交按钮,以这种方式:

      $("div_button_selector").on("click", function(){
         $("input[type='submit']").trigger('click');
      });
      

    【讨论】:

    • 我已经想到了,但我仍然想使用语义 UI 验证。
    【解决方案7】:

    有关表单和错误验证,请参阅帖子 Adding errors to form validation doesn't work?。由于语义 UI 是用户界面的客户端工具,因此这是用于“自我提交/相同代码页”联系电子邮件的 php。既然 Semantic UI 的目的不是逻辑处理,那么你想用什么语言或者方法来提交表单呢? JS/jquery 客户端还是服务器端 php、rails 等?请记住,语义 UI 依赖于 jquery。

    <?php    
    if (isset($_POST["email"]))
    {
        if ($_POST["email"] != "")
        {
            $from = htmlentities($_POST["email"]); 
            $subject = htmlentities($_POST["subject"]);
            $message = htmlentities($_POST["message"]);
            $message = wordwrap($message, 70);
            mail("valid-server-email-username@valid-server-address", $subject, $message, "From: $from\n");
            $_POST["email"] = "";
            $_POST["subject"] = "";
            $_POST["message"] = "";
            unset($GLOBALS['email']);
            header("location: /");
        }
    }
    

    【讨论】:

      【解决方案8】:

      如果你有这样的表格

      <div class="ui form segment">
        <p>Tell Us About Yourself</p>
        <div class="field">
          <label>Name</label>
          <input placeholder="First Name" name="name" type="text">
        </div>
        <div class="field">
          <label>Username</label>
          <input placeholder="Username" name="username" type="text">
        </div>
        <div class="field">
          <label>Password</label>
          <input type="password" name="password">
        </div>
        <div class="ui blue submit button">Submit</div>
      </div>

      你可以使用傻逼脚本来发送表单

      $('.ui.blue.submit.button').on('click', function() {
        submitForm();
      });
      
      function submitForm() {
        var formData = $('.ui.form.segment input').serializeArray(); //or .serialize();
        $.ajax({
          type: 'POST',
          url: '/handler',
          data: formData
        });
      }

      【讨论】:

        猜你喜欢
        • 2018-04-07
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        相关资源
        最近更新 更多