download bmml source – Wireframes created with Balsamiq Mockups

The convention for a 'Select All' checkbox is simple: if blank, click to select all. If ticked, click to de-select all.

But what if a user accidentally clicks Select All? How do they undo this action?

In conventional use, the user will have to recall the previous state of the group of checkboxes and manually click each box as required. This recall may not always be easy, depending on the context.

For example, consider an application that passes information for a user to review -- see above.

Are there any examples of Undo Select All (not De-Select All) in the wild? Or is this an action that should never be required?

  • "See below" what? Jun 1, 2012 at 11:28
  • Edit: see above :) Jun 1, 2012 at 11:52
  • 2
    I've got an app where there are often hundreds of rows like this and a select all button. I simply moved the select all to where it's clearly separate and not easy to accidentally click and it hasn't been a problem....undoing a select (unless this is a crazy complicated process) is sort of an odd situation
    – Ben Brocka
    Jun 1, 2012 at 18:20
  • Have you considered the wisdom of even having a select all button? Why would you use this on a "fire employees" page? Just askin'.
    – Taj Moore
    Jun 5, 2012 at 20:42

8 Answers 8


Does the application have a general undo function?

If no: why would you like to have an "undo selection" possibility? It does not make sense to have an undo option for a selection while at the same time you would not have an undo for things that are in fact irreversible, like for instance the actual firing of the employees itself. I admit that having to reselect every employee again is cumbersome and suboptimal, but at least you can restore the selection.

If yes: This is the place to put it. Name it "Undo select all". Programs that have a complex selection process, e.g. photoshop where the user can manually select a complex shape offers that option if you accidentally make a new selection.

  • thanks for that logical answer. Let me try to clarify. No, there is no undo selection. As for users being able to restore the selection -- this is my point about recall. The user may have received the data from another user, and been presented with it in the system for review. So the user cannot rely on recall... Jun 1, 2012 at 11:38
  • OK, got it. In that case the problem is that the checkbox is not merely used as a selection any more, it also shows a state. That is a problem. Even without the "select all" option you have a problem: selecting a checkbox would not just be a selection of that employee, it would carry out an action: fire/hire the employee. That is no good. Jun 1, 2012 at 11:45
  • To make my point a bit more clear: there is a contradiction. If the checkbox is just a selection it cannot be passed on by someone else. If the checkbox really indicates a certain state (e.g. person is an employee), then it does not make sense to have a "select all" option. It should be a "fire all" button. Jun 1, 2012 at 11:47
  • Aha, a 'fire all' button! Yes, I understand your point about states versus selections. I think 'fire all' button instead of 'select all' would be better. (Afterthought -- perhaps I should have used 'hire all' in my example to lighten the mood?) Jun 1, 2012 at 13:52

It seems a great question for the first time, but if you think a bit you will realise the problem is with your wireframe, because 'select all' should always be on the top.

I just want to point it out, if you put 'select all' to the top of the list - just like in all applications - there will be no need for the function you are asking for!

Generally you know it in advance that you want to 'select all' and if you change your mind, you can simply click it again - 'deselect all' and then select indivudal elements with single clicks.


I have seen the following in a UI guide for a similar situation. What if you make your select all a three-state checkbox:

  • Checked: all items are selected
  • Unchecked: no items are selected
  • Grey (mixed): some items are selected

You can only get into the grey state by manually (de) selecting one or more items from the list. The select all checkbox is updated to reflect the current status whenever needed.

Clicking on the select checkbox should then cycle through the available states. Only if the state before the first click was mixed, then that state is in the cycle of states to go through, and a click on the checkbox when it is unchecked will restore the mixed state.

  • It's a good suggestion, although I must admit that sometimes I find the gray state a little confusing. For example, I see this in Filezilla when I want to change a file's properties using checkboxes, which I find more intuitive than entering numeric values that I can't recall. But when the checkboxes go gray, I'm not sure what it means. I get the sense it means 'between checked and unchecked' but it doesn't assign any number. Feb 28, 2013 at 14:41

If the action is non destructive (i.e. the user needs to do something else to make use of this selection) then the user can simply reload the page to get back to the previous state.

The only time this fails is if the user has changed the existing selection in some way and then clicked select all.

If the action is destructive (i.e. the act of selecting does something to the data) then you should really have an "All items selected are you sure you want to continue?" question or the ability to roll back the last action.

  • Thanks for the answer Chris. Let's assume the action is not destructive. We are then assuming the user will know that they 'can simply reload the page' to restore the initial state. I'm not so sure about that. If there is an 'ability to roll back the action', how do you envisage that? Jun 1, 2012 at 11:40
  • @MichaelHeraghty - most users get to know quite quickly that hitting "cancel" (or it's equivalent) resets the page/dialog.
    – ChrisF
    Jun 1, 2012 at 11:42

This is not a feature that I've ever seen and neither can recall ever really wished for.

The selection is, whether it's checkboxes, objects, text, etc.., very straight forward as it is. This is as long as it is a "simple selection", meaning that it doesn't affect the properties of the items selected. If selection of an item would in some way affect the properties of that item (more than temporarily order it in a selection group that is) I don't see any reason to have an undo option.

For the unlucky user that accidentally clicks "Select all" this may be a drag. But conventionally, adding additional controls to simply undo selections, would only add unnecessary bulk to the user control.



download bmml source – Wireframes created with Balsamiq Mockups

I agree with @Roland's Idea, but also like the idea for such an important function, to provide a warning like @ChrisF said.


Instead of the usual check box, how about a label that shows the number of items selected, e.g. "9 items", which incorporates a dropdown that is obvious to the user with the familiar "Select All" and "Select None" options? Then, if the user chooses Select All, the dropdown options change to "Select None" and "Previous Selection (9)", which would take the user back to the manual selection that was in place before they selected all.

You would need to apply some logic to suppress the "Previous Selection" option if the user had selected all / none manually before they clicked on "Select All" or "Select None", I.e. "Previous Selection" would be all or none anyway.


I'm surprised noone has suggested this, but what about ctrl + z?

It's like the first thing people will try to undo something. We've been conditioned to use it, even when we aren't sure if it will do anything.

  • It's not visible, shortcuts are good to improve speed and make things easier for advanced users but they're really bad allowing discovery of possible actions. Mar 3, 2013 at 14:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.