suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Ereignisbindung für dynamisch erstellte Elemente?

<p>Ich habe einen Code, in dem ich alle Auswahlfelder auf der Seite durchlaufe und das Ereignis <code>.hover</code> an sie binde, um ihre Breite beim Klicken mit der Maus zu ändern ;/code>. </p> <p>Dies geschieht, wenn die Seite bereit ist und ordnungsgemäß funktioniert. </p> <p>Das Problem, das ich habe, ist, dass an alle über Ajax oder DOM nach der ersten Schleife hinzugefügten Auswahlfelder keine Ereignisse gebunden sind. </p> <p>Ich habe dieses Plugin (jQuery Live Query Plugin) gefunden, aber bevor ich das Plugin verwende, um meiner Seite weitere 5 KB hinzuzufügen, wollte ich sehen, ob jemand weiß, wie es geht, entweder direkt mit jQuery oder über andere Optionen. </p>
P粉440453689P粉440453689458 Tage vor449

Antworte allen(2)Ich werde antworten

  • P粉930534280
  • P粉547170972

    P粉5471709722023-08-24 11:57:21

    从 jQuery 1.7 开始,您应该使用 jQuery.fn.on 并填充了选择器参数:

    $(staticAncestors).on(eventName, dynamicChild, function() {});

    说明:

    这称为事件委托,其工作原理如下。该事件附加到应处理的元素的静态父级 (staticAncestors)。每次在此元素或后代元素之一上触发事件时,都会触发此 jQuery 处理程序。然后,处理程序检查触发事件的元素是否与您的选择器 (dynamicChild) 匹配。当存在匹配时,就会执行您的自定义处理程序函数。


    在此之前,推荐的方法是使用 live()< /代码>

    $(selector).live( eventName, function(){} );

    但是,live() 在 1.7 中已被弃用,取而代之的是 on(),并在 1.9 中完全删除。 live() 签名:

    $(selector).live( eventName, function(){} );

    ...可以替换为以下 on()签名:

    $(document).on( eventName, selector, function(){} );

    例如,如果您的页面动态创建具有类名 dosomething 的元素,您可以将该事件绑定到已经存在的父级(这是该事件的核心)这里的问题是,你需要一些存在的东西来绑定,而不是绑定到动态内容),这可以是(也是最简单的选项)是document。但请记住 document 可能不是最有效的选择

    $(document).on('mouseover mouseout', '.dosomething', function(){
        // what you want to happen when mouseover and mouseout 
        // occurs on elements that match '.dosomething'
    });

    事件绑定时存在的任何父级都可以。例如

    $('.buttons').on('click', 'button', function(){
        // do something here
    });

    适用于

    <div class="buttons">
        <!-- <button>s that are generated dynamically and added here -->
    </div>

    Antwort
    0
  • StornierenAntwort