【问题标题】:Click events stop working after an Ajax loadAjax 加载后单击事件停止工作
【发布时间】:2023-03-07 04:48:01
【问题描述】:

我在使用 Ajax 脚本时遇到了一些问题,该脚本禁用了我的 jQuery 点击事件。

以下代码在没有 AJAX 事件的情况下工作:

$(document).ready(function() { 
    $('a.showtabinfos').click(function() {
        $('div.infos').removeClass("showtab").addClass("hidetab");  
        $(this).parent().find('div.infos').removeClass("hidetab").addClass("showtab");
    });
});

所以我在 Jquery 常见问题解答 中发现:

http://docs.jquery.com/Frequently_Asked_Questions#Why_do_my_events_stop_working_after_an_AJAX_request.3F

但不幸的是,我不是 JavaScript 开发人员,我无法转换我的 使用“事件委托”的 jQuery 事件。 有人可以帮我让我的活动看起来像这样:

$('#mydiv').click(function(e) {
    if($(e.target).is('a'))
    {
        fn.call(e.target,e);
    }
});

$('#mydiv').load('my.html');

我尝试了另一种方法来解决我的问题。事实上,我想做的只是通过更改类在点击时打开div

HTML结构:

-- div

------ a.showtabinfos

------ div.infos.hidetab  ( <div class='infos hidetab' ... </div> )

-- /div

当我点击a.showtabinfos 时,我希望div.infos.hidetab 变成div.infos.showtab,所以我尝试在不使用jQuery 的情况下执行此操作,但只使用JavaScript。 我在网上找到了一个帮助我改课的功能:

function addClass(_element, _value)
{
    try
    {
        var oReg = new RegExp("^([\s]*)" + _value + "$");

        if(!_element.className)
        {
            _element.className = _value;
        }
        else
        {
            var bTest = oReg.test(_element.className);

            if(bTest)
            {

                _element.className = _element.className.replace(_value, "");
            }
            else
            {
                var newClassName;
                newClassName = _element.className;
                newClassName += " ";
                newClassName += _value;
                _element.className = newClassName;
            }
        }
    }
    catch(e)
    {

    }
}

我尝试添加这样的链接:

<a class="showtabinfos" tabindex="1" id="imagetab-<?php the_ID(); ?>" href="Javascript: ;" onclick="addClass(this.parentNode.getElementsByClassName('infos'),'showtab');">CLICK HERE</a>

有人可以帮助我解决我的问题的第一种或第二种方法吗?

如果您需要更多信息来回答我,请访问http://www.tom-portfolio.fr/demos/portfolio/category/portfolio/ 看看我在做什么。 我只想改类名&lt;div class"infos hidetab"&gt; to &lt;div class="infos showtab"&gt;

【问题讨论】:

    标签: jquery ajax events


    【解决方案1】:

    Live 会将点击事件添加到页面上当前和将来添加的任何元素:

    $('a.showtabinfos').live("click", function() {
        $('div.infos').removeClass("showtab").addClass("hidetab");  
        $(this).parent().find('div.infos').removeClass("hidetab").addClass("showtab");
    });
    

    我也推荐使用delegate,但如果没有更多标记,我无法准确地向您展示如何做到这一点,因为您基本上需要将事件附加到父容器,如下所示:

    $("#parent_element_of_links").delegate(".showtabinfos", "click", function(){
        $('div.infos').removeClass("showtab").addClass("hidetab");  
        $(this).parent().find('div.infos').removeClass("hidetab").addClass("showtab");
    });
    

    编辑:

    查看您的页面,我有点不清楚您是否启用了 jQuery noConflict,但我认为应该这样做:

    jQuery.noConflict();
    (function($) { 
        $('a.showtabinfos').live("click", function(e) {
            $('div.infos').removeClass("showtab").addClass("hidetab");  
            $(this).siblings('div.infos').removeClass("hidetab").addClass("showtab");
            e.preventDefault();
        });
    })(jQuery);
    

    【讨论】:

    • 我试过直播功能,还是不行。我没有尝试你发布的第二个,我会这样做,但如果你需要了解更多关于我的标记,只需在我的网站上看到它(这是一个正在建设中的网站,我打开它只是为了让你看到问题:tom-portfolio.fr/demos/portfolio/category/portfolio 我猜你有萤火虫。所以尝试手动将 div.infos.hidetab 更改为 div.infos.showtab。这正是我点击图片时想要发生的事情。谢谢!
    • Re,我尝试了您的最后一次编辑,但这仍然无法正常工作。如果我禁用 wordpress 插件“Ajax Comments-Reply”,它会起作用。也许我应该看看这个插件,看看为什么这会禁用我的点击事件?有什么想法吗?
    • 我应该让你看看这个插件使用的“comment.js”,它正在生成新的事件,因此可能会在我的事件中制造麻烦?
    • 是的,看看 cmets.js 可能会有用。另外,请尝试将任何 $ 符号切换为 jQuery,以防万一这是一个冲突问题。
    • 编辑:将$ 切换为jQuery 没有任何改变。两者都在工作,除了激活插件。在此处查看 cmets.js:tom-portfolio.fr/demos/portfolio/wp-content/plugins/ajaxcomment/…
    【解决方案2】:

    live 功能已弃用,您应该使用 .on

    例如

    $(document).on('click', '.selector', function(){ 
       //Your code here
    });
    

    【讨论】:

      猜你喜欢
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多