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