gpt4 book ai didi

jquery - Ajax 加载后单击事件停止工作

转载 作者:行者123 更新时间:2023-12-03 22:55:12 27 4
gpt4 key购买 nike

我在使用 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 Faq中发现:

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

但不幸的是,我不是 JavaScript 开发人员,我无法将我的使用“事件委托(delegate)”的 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.showtabinfo时s,我要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/看看我想做什么。我只是想更改类名<div class"infos hidetab"> to <div class="infos showtab">

最佳答案

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);

关于jquery - Ajax 加载后单击事件停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6789654/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com