addEventListener
установит контекст (this
) uploadCanceled
в xhr
:
function uploadCanceled(evt) {
console.log("Cancelled: " + this.status);
}
Пример: http://jsfiddle.net/wJt8A/
Если вместовам нужно вызвать xhr.abort
нажатием кнопки «Отмена», после этого вы можете вернуть ссылку и добавить любых слушателей, которые вам нужны:
function uploadFile() {
/* snip */
xhr.send(fd);
return xhr;
}
document.getElementById('submit').addEventListener('click', function () {
var xhr = uploadFile(),
submit = this,
cancel = document.getElementById('cancel');
function detach() {
// remove listeners after they become irrelevant
submit.removeEventListener('click', canceling, false);
cancel.removeEventListener('click', canceling, false);
}
function canceling() {
detach();
xhr.abort();
}
// detach handlers if XHR finishes first
xhr.addEventListener('load', detach, false);
// cancel if "Submit" is clicked again before XHR finishes
submit.addEventListener('click', canceling, false);
// and, of course, cancel if "Cancel" is clicked
cancel.addEventListener('click', canceling, false);
}, false);
Пример: http://jsfiddle.net/rC63r/1/