Jquery mobile 验证表单外部的元素

Jquery mobile 验证表单外部的元素,jquery-mobile,asp.net-mvc-4,jquery-validate,Jquery Mobile,Asp.net Mvc 4,Jquery Validate,我有一些元素(输入、文本区域、控制组)和表单元素外的提交按钮 我可以验证这些元素(客户端)吗?例如,检查它们是否是必需的,如果为空则显示消息错误。我可以使用jquery验证插件来完成这项工作吗?怎么做 以下是我迄今为止的代码示例: <div id="formContainer"> <div data-role="fieldcontain"> <fieldset data-role="controlgroup">

我有一些元素(输入、文本区域、控制组)和表单元素外的提交按钮

我可以验证这些元素(客户端)吗?例如,检查它们是否是必需的,如果为空则显示消息错误。我可以使用jquery验证插件来完成这项工作吗?怎么做

以下是我迄今为止的代码示例:

<div id="formContainer">

    <div data-role="fieldcontain">
        <fieldset data-role="controlgroup">
            <legend>User:</legend>
            <div id="usersContainer">
               <input type="radio" name="radio-choice-1" id="radio-choice-1" value="1" />
               <label for="radio-choice-1">User1</label>
               <input type="radio" name="radio-choice-1" id="radio-choice-2" value="2" />
               <label for="radio-choice-2">User2</label>
            </div>
        </fieldset>
    </div>

    <div data-role="fieldcontain" class="ui-hide-label">
        <label for="subjectMessage">Subject:</label>
        <input type="text" name="subjectMessage" id="subjectMessage" value="" placeholder="Subject" />
    </div>

    <div data-role="fieldcontain" class="ui-hide-label">
        <label for="bodyMessage">Body:</label>
        <textarea name="bodyMessage" id="bodyMessage" placeholder="Body" rows="8"></textarea>
    </div>

    <input id="sendMessageBtn" type="submit" value="Send" />
</div>

<script type="text/javascript">

    $(document).one("pageinit", function () {

        $("#sendMessageBtn").on("click", function () {

            var userId= $('#formContainer').find("#usersContainer :radio:checked").val();
            var subject = $('#formContainer').find("#subjectMessage").val();
            var body = $('#formContainer').find("#bodyMessage").val();

            //send data to the server...
        });

    });

</script>

用户:
用户1
用户2
主题:
正文:
$(文档).one(“pageinit”,函数(){
$(#sendMessageBtn”)。在(“单击”,函数(){
var userId=$(“#formContainer”).find(“#userscocontainer:radio:checked”).val();
var subject=$(“#formContainer”).find(“#subjectMessage”).val();
var body=$(“#formContainer”).find(“#bodyMessage”).val();
//将数据发送到服务器。。。
});
});

是的,有两种方法

  • 您没有使用服务器端帮助程序生成标记,而是硬编码了整个标记(如问题中所示)。这是非常糟糕的,但如果您决定采用这种方法,则必须将相应的
    数据-*
    属性添加到不引人注目的验证框架正在使用的输入字段中。在ASP.NET MVC之外使用不引人注目的验证框架是完全可能的,例如在PHP应用程序中,假设您的输入字段包含那些data-*属性。但正如我在上一句话中所说:
    在ASp.NET MVC应用程序之外
    ,这就引出了一个问题:
    在这种情况下,如果不利用ASp.NET MVC,为什么要使用它?
    。所以我建议你放弃这种方法,看看第二种可能性

  • 您可以使用服务器端帮助程序生成这些输入字段,例如Html.EditorFor、Html.TextAreaFor、Html.DropDownListFor、。。。这些助手将负责在一个条件下生成适当的
    数据-*
    属性:这些元素位于表单中。这不是您的情况,因此您可以通过在视图顶部添加以下行来欺骗他们,使他们认为自己在表单中:

    @{
        this.ViewContext.FormContext = new FormContext();
    }
    

  • 若要使用jQuery验证插件,您的输入元素必须包含在表单元素中。@Sparky我对表单元素的问题是,这些数据应该发送到其他服务器(跨域),而我无法发送数据,它总是发送到控制器中的操作。我使用的是
    Ajax.BeginForm(新的AjaxOptions{Url=“跨域Url”,HttpMethod=“Get”})
    。我做错什么了吗?我有点困惑,因为我没有在我的视图中使用模型。。。但是我可以使用这样的东西:
    @Html.Label(…)
    我说得对吗?我遇到的另一个问题是因为之前在客户端呈现了controlgroup。。。如果我使用服务器端帮助程序,我应该在哪里定义需要哪些元素、哪些是错误消息以及它们在哪里显示?你能帮我吗?