JSをハンドラーに配置するデフォルトのjsfiddle設定を維持しているため、フィドルは機能しませんonload
。つまり、関数はグローバルではなく、インラインonclick
属性からアクセスできません。これは、ドロップダウンで変更する必要があります。左側の「ラップなし」設定の1つ。また、関数が呼び出された場合に最初に行うことは、id"year"
を持つ要素から値を読み取ろうとすることであり、そのような要素はありません。現在、パラメータを無視していyear
ます。
そうは言っても、あなたの機能は必要以上に複雑です。parseInt()
最初に1回実行することでコードを大幅に簡略化でき、テストする値が整数でない場合は必要な操作を実行できます。その後、うるう年のテストを1行で実行できます。
また、parseInt()
ユーザー入力で使用している場合、先行ゼロで始まる入力が8進数として扱われることによるあいまいなバグを回避するには、2番目のパラメーターとして基数を指定する必要があります。だからparseInt(year, 10)
。
"true"
最後に、なぜ文字列とを返すの"false"
ですか?関数を次のように呼び出すことができるように、実際のブール値を返す方が理にかなっています。
if (isleap(1992)) {
// do something
}
とにかく、ここに短いバージョンがあります:
function isleap(year) {
year = parseInt(year,10);
if (isNaN(year)) {
alert("Not a number");
return false;
}
if (year%4===0 && (year%100!=0 || year%400===0)) {
alert("Leap");
return true;
} else {
alert("Not leap");
return false;
}
}
デモ: http: //jsfiddle.net/kcyCd/1/
アラートを表示する必要がない場合は、アラートをさらに短くすることができます。
function isleap(year) {
year = parseInt(year,10);
if (isNaN(year)) {
alert("Not a number");
return false;
}
return (year%4===0 && (year%100!=0 || year%400===0));
}
そして明らかに、無効な値をテストする必要がなければ、それはワンライナーになります。