Javascript 在Safari中,悬停效果从第二次起不起作用
我在狩猎旅行中遇到了一个奇怪的问题 我现在正在开发一个用Ajax加载内容的网站,我正在使用Hashchange方法和Hashchange时应用它 我正在获取url,然后加载页面的内容Javascript 在Safari中,悬停效果从第二次起不起作用,javascript,jquery,html,css,safari,Javascript,Jquery,Html,Css,Safari,我在狩猎旅行中遇到了一个奇怪的问题 我现在正在开发一个用Ajax加载内容的网站,我正在使用Hashchange方法和Hashchange时应用它 我正在获取url,然后加载页面的内容 jQuery(window).bind('hashchange', function () { url = window.location.hash.substring(1); if (!url) { return; } var
jQuery(window).bind('hashchange', function () {
url = window.location.hash.substring(1);
if (!url) {
return;
}
var tsTimeStamp= new Date().getTime();
jQuery.get(url, { action: "get", time: tsTimeStamp,"ajaxed": "true"} , function (data, status, xmlHttp) {
var container = jQuery("#hidden");
container.html(xmlHttp.responseText);
var content = jQuery(".inner", container).html();}
然后在加载内容之后,我会应用一些jquery的东西,比如
var ids = " ";
var ids_2 = " ";
for (var i = 0; i <= jQuery(".cats").length; i++) {
ids += "#c" + i + ",";
ids_2 += "#l" + i + ",";
}
ids = ids.substr(0, (ids.length) - 1);
ids_2 = ids_2.substr(0, (ids_2.length) - 1);
jQuery(ids).hover(function () {
href = jQuery(this).attr("href");
id = jQuery('a[href="' + href + '"]').attr("id");
jQuery("img").not(jQuery("img."+id)).addClass("op");
}, function () {
time = setTimeout(remove, 200);
});
jQuery(ids_2).hover(function () {
clearTimeout(time);
jQuery("img.op").removeClass("op");
href = jQuery(this).attr("href");
id = jQuery('a[href="' + href + '"]').attr("id");
jQuery("img").not(jQuery("img." + id)).addClass("op");
}, function () {
jQuery("img.op").delay(200).removeClass("op");
});
function remove() {
jQuery("img.op").removeClass("op");
}
上面的代码正在为图像的地图区域应用悬停效果
本规范适用于4页
除了Safari之外,以上所有代码都可以在所有浏览器上正常工作
问题是,当包含加载的映射的第一个页面工作正常时,代码正常,但当加载的另一个页面包含相同的区域时,它将停止工作,直到刷新整个页面
它似乎是第一次缓存处理程序,然后不将其应用于新的选择器
请记住,当警报ids&ids_2时,它会给出正确的值,但在.hover中使用警报时,它不会在第二次触发
我知道这很复杂,但实际上我一直在解决这个问题。好吧,最好是有一些小的代码片段,但从我所看到的情况来看,在新创建的元素上绑定jQuery处理程序时存在问题。要解决这个问题,必须使用jQuery.live 从jQuery文档: 这种方法是对传统方法的一种改进 用于附加的basic.bind方法 元素的事件处理程序。什么时候 .bind被称为 jQuery对象引用获取 附加处理程序;得到的元素 后来介绍了不要,所以他们会 需要另一个绑定调用 .live方法提供了一个 这种行为的替代品。捆绑 指向目标元素的单击处理程序 使用此方法: 然后再添加一个新元素: 然后单击新元素将 也会触发处理程序
感谢您的回复,但是我先添加新元素,然后绑定这些元素的处理程序。我首先添加新元素,因为我必须在绑定处理程序之前计算元素的数量。它在除safari之外的所有浏览器中都能正常工作,而且它第一次只在浏览器上运行safari@MohamedAmgad,你应该考虑改进你的问题,设置一个较小的例子,或者给这个代码的一个工作例子提供链接。
$('.hoverme').live('hover', function(){
// Live handler called.
});
$('body').append('<div class="hoverme">Another target</div>');