check http://jsfiddle.net/WXMHS/
one solution:
just bind to .preference-toggle instaed of label.
why the question example will emit twice? (ps. just my experience, I can't guarantee the reason is right exactly.)
1st emit: clicking the label for="id" tag (except target button itself) will trigger a click event for target button.
2th emit: the label trigger button click event, and then, bubble to the label tag. so that the 2th our label-click-handler has been executed twice.
I wish it could help you.