I raised this earlier question which (being new to Meta) I mistakenly marked as a feature when it should be a bug. Here goes...
I went to upvote a useful comment to one of my questions, but I accidentally double-clicked the upvote arrow. I did not see a dialog asking for confirmation about un-upvoting the comment. On trying to upvote the comment now, SO is saying "You've already undone your vote on this comment; you cannot upvote it again."
Was running Windows 8.1 and Google Chrome at the time.
On the question mentioned above, another bug showed up when I rapidly clicked the upvote on a comment. I was able to upvote the comment two times before a dialog appeared informing me I had already upvoted the question!
Overall there seems to be a number of bugs here (in summary):
Possible to double-click the upvote button and not get a confirmation dialog
Possible to accidentally double-click a comment and find you can then NOT upvote the comment later "because you've already changed your vote"
Possible to rapidly upvote and get more than one upvote assigned to a comment
I am aware there is a design decision not to allow changes in your comment vote after one minute, but this is also a bug! The commenter has the right to change the comment for (I think) up to 5 minutes. The right to change your vote on a comment should be at least as long as the right to edit the comment, because the commenter could change the comment to something you would prefer not to upvote.
To get over the main problem of the accidental double-click, I propose the following resolution:
- All important actions (vote, edit, etc) have a timestamp attached to them
- Do not accept a 2nd action (eg. the 2nd vote action in my case) if it occurs less than 1000ms after the 1st.
- This would also solve the other bug I noted where I managed to get in multiple upvotes by rapidly clicking.
In my opinion, the voting restrictions are overly complex. Just put a simple timeout of (say) a day on changing your vote and leave it at that. Only a tiny minority of people will abuse this right and you'll simplify your backend code.