Попробуйте обрабатывать нажатие на кнопку по событию onmousedown, а не по клику. onmousedown наступает раньше и вы успеете нормально обработать событие, до потери фокуса. А чтоб выделение вообще не сбросилось напишите в конце обработчика return false;
а) лучше использовать первый вариант, потому что так принято. Когда вы нажимаете указателем мыши по кнопке в любой популярной ОС ничего не происходит. Происходит только тогда, когда вы отпустите указатель находясь на той же кнопке. Это даёт вам, например, шанс передумать и убрать указатель с кнопки. Тогда действие не произойдет. Отклонение от такого поведения будет восприниматься странным.