Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Safari中,悬停效果从第二次起不起作用_Javascript_Jquery_Html_Css_Safari - Fatal编程技术网

Javascript 在Safari中,悬停效果从第二次起不起作用

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

我在狩猎旅行中遇到了一个奇怪的问题

我现在正在开发一个用Ajax加载内容的网站,我正在使用Hashchange方法和Hashchange时应用它

我正在获取url,然后加载页面的内容

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