デフォルト・アクションの抑止
デフォルト・アクション(ブラウザが最初から組み込んでいる挙動)を無効にして独自のアクションを加えたい場合はpreventDefaultメソッドを使います。
Internet Explorerでは、window.eventオブジェクトのreturnValueプロパティにfalseをセット、Safari1.3では、preventDefaultメソッドが機能しないためその対策が必要です。
function XpreventDefault(evt) {
// W3C DOM準拠ブラウザ
if(evt && evt.preventDefault) {
evt.preventDefault();
// Safari 1.3対策
evt.currentTarget['on'+evt.type] = function() {return false;};
// Internet Explorer
} else if(window.event) {
window.event.returnValue = false;
}
}
イベントの伝播を抑止
イベントが発生すると、バブリングによってイベントがドキュメントツリーの頂上まで伝播します。
所定の要素でイベントを捕捉したら、それ以上伝播しないようにstopPropagationメソッドを使用します。
Internet Explorerでは、window.eventオブジェクトのcancelBubbleプロパティにtrueをセットします。
function XstopPropagation(evt) {
// W3C DOM準拠ブラウザ
if(evt && evt.stopPropagation) {
evt.stopPropagation();
// Internet Explorer用
} else if(window.event) {
window.event.cancelBubble = true;
}
}
Submit処理
上記クロスブラウザ対応メソッドを使用した送信前入力チェックを行うプログラム。
フォームの送信ボタンを押したら、送信前に入力チェックを行います。
submitコントロールのタグ内に"onSumbmit="と記述すると、JavaScriptが無効になっている場合は送信できなくなります。
JavaScriptが有効であれば入力チェックを行い、無効であれば、送信だけは行えるようにします。
(1)HTMLではJavaScriptの処理を考慮せず、通常のフォームとして用意する。
(2)javaScript側では、FORMタグに対してsubmitイベントリスナーをセットする。
(3)イベント発生時に処理される関数内で、デフォルト・アクションを抑止する。
(抑止しないと、エラー表示をした直後にフォーム送信が行われてしまう。)
HTML
JavaScript
// loadイベントリスナーをセット
XaddEventListener(window, 'load', init);
// HTML文書が読み込まれたときに実行させる処理
function init() {
// フォームにsubmitイベントリスナーをセット
var form = document.forms.item(0);
XaddEventListener(form, 'submit', submitForm);
}
// フォーム送信処理
function submitForm(evt) {
// テキストボックスの要素ノードオブジェクト
var text1 = document.getElementById('text1');
// 入力値をチェック
if( text1.value == '' ) {
alert('この項目は必須です。');
} else if( text1.value.match(/[^\d]/) ) {
alert('この項目には半角数字で入力してください。');
} else {
// フォーム送信
document.forms.item(0).submit();
}
// デフォルト・アクションを抑止
XpreventDefault(evt);
}
チェックの解除
通常ラジオボタンにチェックを入れてしまうとそれを解除することはできません。
このサンプルでは、解除ボタンを押すことでチェックの状態を解除することができます。
XaddEventListener(window, 'load', init);
function init() {
var btn = document.getElementById('relBtn');
// 解除ボタンにイベント・リスナーをセット
XaddEventListener(btn, 'click', relRadio);
}
function relRadio(evt) {
var radios = document.getElementsByName('gender');
var checkedradio = null;
for( var i=0; i
チェックの変更を判定
判定ボタンを押すと、チェックの状態が変更されたどうかを判定します。
// loadイベントリスナーをセット
XaddEventListener(window, 'load', init);
function init() {
var btn = document.getElementById('btn');
// clickイベントのリスナーをセット
XaddEventListener(btn, 'click', reportCheckStatus);
}
function reportCheckStatus(evt) {
// チェックボックスのリスト
var checkboxes = document.getElementsByName('check');
// チェック状態の変更を判定
var changed = false;
for( var i=0; i
チェック項目のテキスト取り出し
ラジオボタンやチェックボックスのINPUTタグにtitle属性を加えテキストをセットしておくと、JavaScript側からテキストを取り出すことが出来ます。
このサンプルでは、表示ボタンを押すと、選択されているチェックボックスのテキストを表示します。
// loadイベントリスナーをセット
XaddEventListener(window, 'load', init);
function init() {
var btn = document.getElementById('btn');
// clickイベントのリスナーをセット
XaddEventListener(btn, 'click', reportCheckStatus);
}
function reportCheckStatus(evt) {
// チェックボックスのリスト
var checkboxes = document.getElementsByName('hobby');
// チェック項目を判定し、title属性値を取り出す
var msg = '';
for( var i=0; i