【问题标题】:is it possible to attach load event to a DIV using jquery "on" inside a dynamically loaded content [duplicate]是否可以在动态加载的内容中使用jquery“on”将加载事件附加到DIV [重复]
【发布时间】:2014-06-21 16:07:41
【问题描述】:

我正在尝试使用 $('#form').validate 设置验证。大多数示例为此使用 document.ready。因为我的页面是动态加载的,所以我不能使用 document.ready。

$(#div).on('event') 的大多数例子都使用了点击事件,是否可以绑定'load'事件?

<div id="DivWhichIsntLoadedDynamically">
<div id="DynamicallyLoadedDiv">

<form id="myform">  
     <input type="text" name="entry[email]" />  <br/>  
     <input type="text" name="field2" /> <br/> 
     <input type="submit" />
</form>

</div>
</div>

$('#DivWhichIsntLoadedDynamically').on('load', function () {
    alert('div load');

    $('#myform').validate({
        rules: {
            'entry[email]': {
                email: true
            },
            field2: {
                equalTo: '[name="entry[email]"]'
            }
        },
        submitHandler: function(form) { // for demo
            alert('valid form');
            return false;
        }
    });

});

http://jsfiddle.net/JCY2E/6/

更新的小提琴: http://jsfiddle.net/JCY2E/8/

【问题讨论】:

  • 向我们展示动态加载表单的真实代码。
  • 我还是不明白你为什么拒绝显示加载内容的代码。
  • 我很抱歉,但在 JSFiddle 上创建这么多代码并不容易。假设我们有一个侧边栏,其中包含动态加载的链接,具体取决于给定的部分视图(asp.net MVC)的 url 列表。这些链接在页面的右中部分加载内容。在其中一些内容中,可能存在需要验证的带有控件的表单。
  • 链接问题的答案可能有效,但请相信我,自过去 2 天以来我一直在寻找解决方案,但我无法用关键字找到该问题。
  • 归根结底,不管怎么做,只能在表单创建后调用.validate()

标签: jquery jquery-validate jquery-on


【解决方案1】:

jQuery 允许您在父容器上附加事件。见jQuery API on。 像这样,您可以在当前未加载的内容上附加一个事件。

$("#containerWhichIsntLoadDynamically").on("myEvent", "#myform", myFunction);

【讨论】:

  • 问题是您不能将.validate() 方法附加到任何尚不存在的东西上。没有解决方法,因为不需要。只需创建表单后调用.validate()
【解决方案2】:

引用 OP:

“我正在尝试使用 $('#form').validate 设置验证...因为我的页面是动态加载的,所以我无法使用 document.ready。”

您不能将.validate() 方法附加到尚不存在的任何内容。没有变通方法,因为不需要,也不需要绑定任何事件。

您只需在动态加载您的form 之后立即调用.validate() 方法。由于您从未准确显示您是如何加载此动态内容的,因此我的回答以通用按钮为例。

$(document).ready(function () {

    $('#test').on('click', function () {  // generic button -> trigger demo

        // load the form dynamically
        $('#notificationContainer').html('your form markup');

        // now you can initialize the plugin
        $('#myform').validate({ ... });

    });

});

演示:http://jsfiddle.net/DNZ9Y/

【讨论】:

  • 这可能对我不起作用,因为我无权访问 document.ready。我将更新我的代码以显示一个未动态加载的容器。我可以使用它的加载事件来设置验证吗?
  • @krprasad,按照您的解释方式,这些都没有任何意义。 显示动态加载表单的代码。
  • Div DynamicallyLoadedDiv 及其内容是动态加载的。我想在这个 div 中包含 JavaScript。我希望这个 div 中的所有表单都有自己的验证设置。
  • @krprasad,那么答案是否定的,你不能那样做。
  • 感谢 sparky,但我正在考虑以另一种方式进行:我将验证规则(data-rule-email="true")与控件/元素放在一起,并简单地使用 foreach 循环每个表单并对其调用验证,我可以在 document.ready 中执行此操作,因为它是一个通用的全局策略。这应该可以正常工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多