如何在语义UI中提交表单?

时间:2013-10-20 20:08:25

标签: javascript html forms semantic-ui

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

我读了this tutorial,但是使用Angular进行提交而不仅仅是语义用户界面。

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

8 个答案:

答案 0 :(得分:22)

你可以使用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表单行为,即当您点击提交按钮时,它将在上面的案例中向/注册发出POST请求。如果触发了任何规则,则会阻止提交,直到没有验证错误。

答案 1 :(得分:9)

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

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

答案 2 :(得分:9)

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

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

答案 3 :(得分:5)

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

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

  1. 现在是时候仔细检查你是否已成功链接到jquery,语义javascript和语义css。

  2. 将class =“ui form”添加到表单标记中。

  3. 在下面添加javascript。

  4. $(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”,语义UI执行其余操作:

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

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

答案 4 :(得分:4)

如果你不使用ajax会怎么样?!

使用这个:

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

});

在这种情况下,您可以使用<button>代码...而无需使用经典代码

答案 5 :(得分:0)

语义用户界面基于jQuery和CSS,所以如果你想提交你的表单数据,你有办法做到这一点:

  1. 使用AJAX发送表单数据

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

  3. 招!

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

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

答案 6 :(得分:0)

有关表单和错误验证,请参阅帖子Adding errors to form validation doesn't work?。由于Semantic UI是用户界面的客户端工具,因此这是用于“自提交/相同代码页”联系电子邮件的php。由于语义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: /");
    }
}

答案 7 :(得分:-1)

如果你有这样的表格

<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>

您可以使用foolowing脚本发送表单

$('.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
  });
}