Попробуйте обрабатывать нажатие на кнопку по событию onmousedown, а не по клику. onmousedown наступает раньше и вы успеете нормально обработать событие, до потери фокуса. А чтоб выделение вообще не сбросилось напишите в конце обработчика return false;