При первом вызове toggle() спан еще пустой, но есть, он скрывается, а уже потом устанавливается текст в html().
Имхо стоит разделить toggle() и html() в данном случае, если нет нужды при каждом клике устанавливать новое содержимое спана.
Ну а если уж на то и пошло то изначально спан действительно надо как бы завернуть в display:none;
А то получается что у вас изначально он отображен пустым, вот первый клик и скрывает его...