【问题标题】:jquery .submit()jQuery .submit()
【发布时间】:2011-05-06 02:15:54
【问题描述】:

尝试对没有<form> 标签的表单进行验证。

它是一个cms插件的结构,使用ajax,不知道为什么输入没有用<form></form>包裹。

HTML:

<div class="feedback">
    <input id="name" type="text" name="ajax-name" value="Your name" />
    <input id="mail" type="text" name="ajax-mail" value="Your e-mail" />
    <button type="submit" id="done">Send</button>
</div>

JS:

$(".feedback #done").click(function() {
    var flag = true;
    if (!$("#name").val()){
        $("#name").addClass('error');
        flag = false;
    }
    if (flag == true)
        $(".feedback").submit();
});

此代码不起作用。

如何在没有&lt;form&gt; 标签的情况下对表单进行验证?

Ajax 不知道这个验证。

谢谢。

【问题讨论】:

    标签: jquery validation forms button input


    【解决方案1】:

    而不是

    if (flag == true) 
        $(".feedback").submit(); 
    

    return flag;
    

    如果没有&lt;form&gt;,您将无法提交,但您可以阻止或允许 click() 甚至完成。这是完整的代码:

    $(".feedback #done").click(function() { 
        var flag = true; 
        if (!$("#name").val()){ 
            $("#name").addClass('error'); 
            flag = false; 
        }
    
        //return the value of flag instead of working with submit() 
        return flag;
    });
    

    如果单击事件返回 false,则应阻止单击继续进行。您的标志变量是真还是假,具体取决于验证的结果,这将决定流程是否向前推进。

    【讨论】:

    • 对不起,我不明白。请给出更详细的答案。
    【解决方案2】:

    另一种完成工作的方法,用&lt;form &gt;标签包装.feedback的所有子节点,然后在&lt;form id="someid"&gt;上执行.submit()

    $(function () {
        $('.feedback').children().wrapAll('<form id="form" />');
        $('.feedback #done').click(function () {
            var flag = true;
            if (!$("#name").val()) {
                $("#name").addClass('error');
                flag = false;
            }
            if (flag) {
                $("#form").submit();
                return false;
            }
        });
    });
    

    【讨论】:

      【解决方案3】:

      @edit 所以我实际上阅读了这个问题,即使它很旧,这似乎仍然相关......

      如果使用 jQuery 1.7,只需使用 .change() 或 .bind() 或 .on() 扩展提交按钮。 e.preventDefault() 可能与 ajax 处理程序一起使用?链接 razzle dazzle unbind 函数,如下所示:

      var some_flag_bool = false;
      $('#done').click( function (e) {
        e.preventDefault();
        some_flag_bool = true;
        $(this).unbind('#done').submit();
        //return might be considered optional
        return this.some_flag_bool;
      });
      

      或者在 jQuery 1.7 中使用类似的东西来尝试及早发现:

      function validation() { if (!foo) { throw new Error("oh noz!"); }
      $('body').on('change', 'input', function() { validation(); });
      

      可以 $.attr('disabled','disabled') 按钮,当文档准备好,然后 $.removeAttr('disabled') 验证方法

      但如果是我,我会从我的 ajax 处理程序中调用验证方法或使用 jQuery.validation 插件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多