select id (少なくともフィドル) は camelCased asmySelect
でしたが、 id にアクセスしようとしていました#myselect
。マークアップの ID を変更しない限り、これは次のようになります。
var firstoption = $('select#mySelect');
また、オプションを選択しないためにデフォルト値 0 を指定したことにも気付きました。何らかの理由で!firstoption.val()
、val() がゼロの場合、if ステートメントが期待しているように見えるように、true ではなく false を返します。この場合、!0 は明らかに true です。
あなたのマークアップに合わせてロジックを変更したところ、あなたが期待または望んでいたように動作するようでした:
if (firstoption.val() == 0) {
error.html('Please include an option!');
firstoption.focus();
}
更新されたフィドルを編集: http://jsfiddle.net/ZG8mv/8/
これで、focus() の実行が間違っている順に表示されます。つまり、幅もオプションも指定されていない場合、そのボックスがフォーカスを受け取ります。以前は、オプション メッセージが他の 2 つよりも優先されていました。