Javascript Ajax没有';t在基于webkit的浏览器上触发更改事件

Javascript Ajax没有';t在基于webkit的浏览器上触发更改事件,javascript,ajax,webkit,jquery-plugins,Javascript,Ajax,Webkit,Jquery Plugins,我已经修改了Jquery插件,以满足向服务器发送GET请求作为“ping”它们的方式的需要 我还添加了一些javascript代码,以添加一些奇特的功能,例如:根据Jquery插件更改的范围中更改的值,它会相应地更改图标 为了从本质上实现这一切,我做了如下操作:当Ajax获得一个“完整”事件时,它会将一个“onChange”事件强制到span,从而触发javascript验证函数来更改状态图标 下面是我稍微修改过的jQuery插件的代码: /** * ping for jQuery *

我已经修改了Jquery插件,以满足向服务器发送GET请求作为“ping”它们的方式的需要

我还添加了一些javascript代码,以添加一些奇特的功能,例如:根据Jquery插件更改的范围中更改的值,它会相应地更改图标

为了从本质上实现这一切,我做了如下操作:当Ajax获得一个“完整”事件时,它会将一个“onChange”事件强制到span,从而触发javascript验证函数来更改状态图标

下面是我稍微修改过的jQuery插件的代码:

/**
 * ping for jQuery
 * 
 * Adapted by Carroarmato0  (to actually work instead of randomly "pinging" nowhere instead of faking
 *
 * @auth Jessica
 * @link http://www.skiyo.cn/demo/jquery.ping/
 *
 */
(function($) {
    $.fn.ping = function(options) {
        var opts = $.extend({}, $.fn.ping.defaults, options);
        return this.each(function() {
            var ping, requestTime, responseTime ;
            var target = $(this);
                        var server = target.html();
                        target.html('<img src="img/loading.gif" alt="loading" />');
            function ping() {
                $.ajax({url: 'http://' + server,
                    type: 'GET',
                    dataType: 'html',
                    timeout: 30000,
                    beforeSend : function() {
                        requestTime = new Date().getTime();
                    },
                    complete : function() {
                        responseTime = new Date().getTime();
                        ping = Math.abs(requestTime - responseTime);

                                                if (ping > 2000) {
                                                    target.text('niet bereikbaar');
                                                } else {
                                                    target.text(ping + opts.unit);
                                                }

                                                target.change();
                    }
                });
            }
            ping();
            opts.interval != 0 && setInterval(ping,opts.interval * 1000);
        });
    };
    $.fn.ping.defaults = {
        interval: 3,
        unit: 'ms'
    };
})(jQuery);

我想您可以尝试使用jQuery的checkServerIcon内置方法:

$(object).parent().prev().parent().find('img:first').attr({src: 'image-source-here'});

浏览器之间可能有一些怪癖,可以通过使用jQuery的方法来解决

使用javascript的onchange的JQuery更改方法instaid target.change()只会触发jquery的有界函数

以下是解决方案:

我从span中删除了onchange事件,并为其指定了一个类名:

echo "  <td class=\"center\"><span class=\"ping\" id=\"ping$pingNb\">" .$server['IP'] . "</span></td>";

现在,该代码在Firefox和基于Webkit的浏览器(如Google Chrome:)中都能正常工作。

问题是,在de jQuery插件中,target.change()操作根本不会触发onChange事件。(在基于Webkit的浏览器中)更具体地说:如果在基于Webkit的浏览器中执行以下操作,则target.change();警惕(“猴子”);显示警报,但从未触发:onChange=“checkServerIcon(this)”我通过在checkServerIcon函数中添加以下作为第一个操作来检查:警报(“正在攻击”);然后什么也没发生。试试@Stino说的,使用jQuery的方法绑定onchange>>$('your-span')。更改(checkServerIcon);
$(object).parent().prev().parent().find('img:first').attr({src: 'image-source-here'});
echo "  <td class=\"center\"><span class=\"ping\" id=\"ping$pingNb\">" .$server['IP'] . "</span></td>";
<script type="text/javascript">
    $(document).ready(function(){
        $("span.ping").change(checkServerIcon);
    });
</script>
function checkServerIcon() {
    var tr = $(this).parent().parent();
    var img = tr.find('td>img').first().attr('src');
    var delayText = tr.find('td>span').text();
    var delay = delayText.substring(0, delayText.length - 2);

    if ( isInteger(delay) ) {
        tr.find('td>img').first().attr('src','img/servers/enable_server.png');

    } else {

        if (delay == "bezig.") {
           tr.find('td>img').first().attr('src','img/servers/search_server.png');
        } else {
            tr.find('td>img').first().attr('src','img/servers/desable_server.png');
        }
    }   
}