Ваш код работает следующим образом:
Все, что вы установили внутри функции обратного вызова, будет выполнено, пока процесс еще продолжается. Но следующее предложение:
location.reload(true);
(который находится за пределами обратного вызова, «ожидающего» результатов) выполняется сразу после оператора jquery, не заботясь о том, закончился этот оператор или нет.
Одно решение, которое может работать на вас:
var elements=jQuery(":button[attributeFoo=\"bar\"]");
var total=elements.length;
jQuery(elements).each(function( index, elem ) {
jQuery(elem).click();
if(index == total-1)
location.reload(true);
});
console.log("show before reload")
Итак, он перезагружает страницу, как только последний элемент был обработан (нажат) внутри обратного вызова. Помните, что сообщение «покажите перед перезагрузкой» появится перед обновлением страницы.