我已經改編了一個jquery插件來填充我的需求,以發送GET請求到服務器作爲「ping」它們的一種方式。Ajax不會在基於webkit的瀏覽器上觸發更改事件
我也添加了一些JavaScript代碼來添加一些奇特的功能,例如:根據Jquery插件更改的跨度中更改的值,它會相應地更改圖標。
爲了使它基本工作,我做了這樣的事情,當Ajax得到一個「完整的」事件時,它強制一個「onChange」事件的跨度,觸發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);
target.change();是觸發「的onchange」事件跨度中的代碼:
echo " <td class=\"center\"><span id=\"ping$pingNb\" onChange=\"checkServerIcon(this)\" >" .$server['IP'] . "</span></td>";
在Firefox工作的,checkServerIcon(本)被執行,並傳遞跨度對象的功能。
function checkServerIcon(object) {
var delayText = object.innerHTML;
var delay = delayText.substring(0, delayText.length - 2);
if (isInteger(delay)) {
object.parentNode.previousSibling.parentNode.getElementsByTagName('img')[0].src = 'img/servers/enable_server.png';
} else {
if (delay == "bezig.") {
object.parentNode.previousSibling.parentNode.getElementsByTagName('img')[0].src = 'img/servers/search_server.png';
} else {
object.parentNode.previousSibling.parentNode.getElementsByTagName('img')[0].src = 'img/servers/desable_server.png';
}
}
}
的事情是,在德jQuery插件,該target.change()操作根本不會觸發onChange事件。 (在基於Webkit的瀏覽器中) – Carroarmato0 2010-04-18 13:07:03
要更具體一些:如果我在基於Webkit的瀏覽器中執行以下操作,請參閱 target.change(); 警報(「The Monkeys」); 警報顯示,但是這是從來沒有觸發: 的onChange =「checkServerIcon(本)」 我檢查,通過增加以下內容作爲checkserverIcon函數中的第一個動作: 警報(「被攻擊」 ); 沒有任何反應。 – Carroarmato0 2010-04-18 13:13:45
嘗試@Stino所說的,使用jQuery的綁定方法onchange >> $('your-span')。變化(checkServerIcon); – Shiki 2010-04-18 14:56:23