【问题标题】:Use jQuery Validation Engine with Tabs?使用带有标签的 jQuery 验证引擎?
【发布时间】:2013-07-16 18:08:18
【问题描述】:

我有一个使用 jQuery UI 选项卡的 ASP.NET Web 表单页面。在每个选项卡中都有一组输入,包括在选项卡中提交输入的按钮(使用 AJAX 调用,但这与本次讨论无关)。

我只想将 jquery 验证引擎 (https://github.com/posabsolute/jQuery-Validation-Engine) 附加到包含选项卡内容的输入子集,但是,由于 ASP.NET Web 表单的工作方式,只有一个表单元素和验证引擎必须附加到表单。

有没有一种简单的方法来告诉这个验证引擎在验证调用中包含当前可见的选项卡/元素?

【问题讨论】:

    标签: asp.net webforms jquery-ui-tabs jquery-validation-engine


    【解决方案1】:

    编辑回复:

    你要找的更容易!!!如果您只是想验证用户当前所在选项卡上的字段而不限制他们转到其他选项卡,那么在激活我提供的部分代码之前忽略选项卡,并将您的 jQuery 验证引擎初始化为 ignore 验证非所有非活动标签的可见字段。您的代码如下所示:

    jQuery("#myForm").validationEngine('attach', {
        promptPosition: "bottomLeft",
        validationEventTrigger: "submit",
        validateNonVisibleFields: false // this does the trick!
    });
    

    这是用于说明示例的新 JSFiddle:http://jsfiddle.net/T7daH/

    干杯! :-)

    ----------------------------------- -------- 原始答案 ---------------------------------------- -------------

    实际上有一种非常简单的方法可以使用跨越多个选项卡的表单来实现 jQuery 验证引擎,而无需以编程方式触发每个字段或选项卡单击的验证。

    如果您有以下跨多个选项卡的表单...

    <form id="myForm" action="">
    <div id="tabs">
        <ul>
            <li><a href="#tabs-1">Tab 1</a>
    
            </li>
            <li><a href="#tabs-2">Tab 2</a>
    
            </li>
            <li><a href="#tabs-3">Tab 3</a>
    
            </li>
        </ul>
        <div id="tabs-1">
            <input type="text" id="requiredFiled" name="requiredField" class="validate[required]" />
        </div>
        <div id="tabs-2"></div>
        <div id="tabs-3"></div>
    </div>
    

    然后你像这样设置表单和选项卡:

    jQuery("#myForm").validationEngine('attach', {
        promptPosition: "bottomLeft",
        validationEventTrigger: "submit",
        validateNonVisibleFields: true,
        updatePromptsPosition: true
    });
    
    $(function () {
        $("#tabs").tabs({
            beforeActivate: function (event, ui) {
                if (!$("#myForm").validationEngine('validate')) {
                    event.preventDefault();
                    $('#myForm').validationEngine('hide');
                    setTimeout(function () {
                        $("#myForm").validationEngine('validate');
                    }, 450);
                }
            }
        });
    });
    

    如果用户当前所在的选项卡不完全有效,则结果是用户无法选择另一个选项卡。这是 JSFiddle 演示:http://jsfiddle.net/g9yLL/36/

    干杯! :-)

    【讨论】:

    • 我很欣赏你清楚的例子,但它没有回答我的问题。需要明确的是,当我单击该选项卡上的保存按钮时,我只希望验证当前选项卡。我不希望系统因为当前选项卡无效而阻止用户选择其他选项卡。
    • @Sosiosh -- 更简单!我更新了答案,这里是 JSFiddle 演示:jsfiddle.net/T7daH
    • 你确实是个圣人,但我需要考验你的虔诚。 ASP.NET 每页有一个表单。我在选项卡之外的该页面上有其他输入控件(即搜索框)。我也有标签,每个标签都有多个输入和一个按钮。我想单击该按钮,并且仅验证该选项卡中的输入。单击按钮不会“提交”表单,但会运行代码,包括验证当前选项卡的输入。另请注意我最初的问题:“验证引擎必须附加到表单。”如何验证标签内容而不是标签外的搜索框?
    • @Sosish -- 作为对所有花时间回答您问题的人的礼貌,如果您实际上可以包含代码的 sn-ps,那就太好了,因为您在最初的问题中没有提到您在选项卡之外有输入字段。你最初的问题的措辞方式,我提供的答案是完全有效的,但现在你正在有效地改变你的问题的范围。您如何创建一个与您拥有的代码紧密复制的 JSFiddle,我将提供解决方案,这样我就不会一直提供错误问题的答案。成交?
    • 我最初的问题是“我想将 jquery 验证引擎...附加到仅包含选项卡内容的输入子集。”如果您不想,您真的不必解决我的问题;虽然我很欣赏你的努力,但我不会回应被动的攻击性反应。谢谢。
    【解决方案2】:

    我有一个带有多标签表单的网站,并使用以下方法解决了它:

    $(document).ready(function(){}
    $('#tab1').click(function(){
    // #tab1  name of the tab / a href link inside that tab 
    
       var field1 = $("#field1").validationEngine('validate');
       var field2 = $("#field2").validationEngine('validate');  
    
      if(field1 || sources )
      { // to show the error messages ;
       return false;
      }     
     });
    
    
     $('#tab2').click(function(){
    // #tab2  name of the tab / a href link inside that tab 
    
       var field1 = $("#field1").validationEngine('validate');
       var field2 = $("#field2").validationEngine('validate');  
    
      if(field1 || field2 )
      { // to show the error messages ;
       return false;
      }     
     });
    
    );
    

    有关更多信息,请查看https://github.com/posabsolute/jQuery-Validation-Engine 并在验证标题下搜索字段验证。

    【讨论】:

    • 我希望有一个简单的解决方案,只要从正在验证的表单中添加或删除经过验证的输入,它就不需要维护 javascript 验证代码。我很欣赏这个建议,但是必须以编程方式对每个单独的字段触发验证既复杂又复杂,而且还会导致验证引擎为每个未通过验证规则的字段显示验证工具提示。这与引擎在一次验证整个表单时表现出的行为不同。否则谢谢!
    • @Sosiosh,你有没有找到解决这个问题的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多