我的公司使用基於Web的產品,其UI需要我們點擊超過200個複選框才能滿足某些用例。我們要求提供「全部取消」功能,但顯然不是即將推出的。GreaseMonkey jQuery腳本隻影響一個元素
我試着寫一個簡單的GreaseMonkey腳本來解決這個問題:
$('img').click(function() {
$('input.HideQuestion:checked').each(function() {
$(this).click();
});
});
(有一個形象,我們的標誌,我的點擊目標在頁面上使用)
麻煩的是,每次點擊圖片時,只有一個(〜270)複選框會受到影響。每增加一次點擊都會影響下一個複選框。
我可以看到,每次勾選複選框時,網站都會發出Ajax調用,但該Ajax調用的響應正文爲空,因此我認爲它們只是更新服務器上的狀態,而不是替換部分頁面。
爲什麼只有一個複選框最終會被取消選中?
當我用另一種方法
$(this).prop("checked", true);
所有複選框是選中視覺,但Ajax調用沒有發生,服務器狀態從不更新。另外,當我檢查任何複選框時,所有複選框都會恢復到GreaseMonkey之前的狀態。
UPDATE
我嘗試以下兩個建議由@BrockAdams攔截Ajax調用。正在調用alert()。
覆蓋XMLHttpRequest.prototype.open https://stackoverflow.com/a/7778218/141172
(function() {
var proxied = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
alert('A-ha! Open!');
return proxied.apply(this, [].slice.call(arguments));
};
})();
攔截目標頁面的AJAX使用.ajaxSuccess()
https://stackoverflow.com/a/8252726/141172
// Also tried: unsafeWindow.$('body').ajaxSuccess (
$('body').ajaxSuccess (
function (event, requestData)
{
alert('A-ha. Success!');
}
);
_所有的複選框在視覺上都是未經檢查的_您將checked屬性設置爲'true',這將檢查所有複選框,但不會取消選中它們。 – undefined
@undefined:是的,我知道。想要提及的是,我也嘗試過(但放棄)這種方法。 –
這比觸發200次以上的點擊事件更好。 – undefined