Не срабатывает - потому что слева в фидле выбрано onLoad, а потому твой код помещается в анонимную функцию вызываемую при загрузке страницы, и функция check становится локальной, не доступной из глобальной области видимости. Потому при клике её просто не находит.
А работает не правильно, после убирания onLoad - потому что условие заданно не правильно:
if(numbers!=1 || numbers!=2 || numbers!=3)
если( (numbers не равно 1) или (numbers не равно 2) или (numbers не равно 3) )
Допустим numbers == 1, ок, первое условие ложно, но уже второе(numbers не равно 2) - истинно. Условие должно быть:
if(numbers!=1 && numbers!=2 && numbers!=3)
P.S. В javascript не принято кидать исключения на каждый чих. Исключения следует использовать по прямому назначению(критические ошибки). Для всего остального более чем хватает обычной логики.