JavaScriptプログラムに関する各種メモ書き:タグ「エラー対処」での検索

IE8以下で console.log がエラーになる問題の対処

IE8以下で JavaScriptで console.log() を記述しているとエラーとなってしまいます。 そこでIE8以下でもとりあえずエラーが出ないようにする対策

対策1. consoleオブジェクトがあるかどうかを調べてから console.log() を使用する

console.log( my_obj);

  ↓ このように変更する。

if(console && console.log) { console.log( my_obj); }

対策2. 何もしない空のconsoleオブジェクトを作成する

(function () {
    if (typeof window.console === "undefined") {
         window.console = {}
    }
    if (typeof window.console.log !== "function") {
         window.console.log = function () {}
    }
})();

引用 : http://goo.gl/czcLY3

No.972
09/09 10:42

edit

jQuery
エラー対処

ブラウザ自動運転iMacrosの使い方と細かいテクニック

・コメントアウト【 .iim ファイル】

' 先頭がクォーテーションはコメントと見なされます
' コメント 
' コメント

・2秒間ウェイトする(待つ)【 .iim ファイル】

WAIT SECONDS=2

・全てのコマンド実行時に x秒間ウェイトする(待つ)【 .iim ファイル】

SET !REPLAYSPEED SLOW
SET !REPLAYSPEED MEDIUM
SET !REPLAYSPEED FAST
SLOW   : 2秒待つ
MEDIUM : 1秒待つ
FAST    : 0秒待つ(待たない。)

・コマンドライン(URL,検索バー)からの実行

マクロ「mymacro.iim」を実行します。

 imacros://run/?m=mymacro.iim

実は拡張子 .js のマクロも実行できます

 imacros://run/?m=mymacro.js

フォルダ「myfolder」の中に入った「mymacro.iim」を実行するには「/」を「%5C」で置き換えます

 imacros://run/?m=myfolder%5Cmymacro.iim

Aタグを使ってHTMLから起動することもできます

<a href="imacros://run/?m=myfolder%5Cmymacro.iim">マクロ起動</a>

・JavaScriptからのマクロ実行【 .js ファイル】

var test;
test = "CODE:";
test += "URL GOTO=www.google.com \n";
var rt = iimPlay(test);
alert(rt); // 1 以下の時エラー

・iMacrosの .js からDOMオブジェクトを操作する【 .js ファイル】

window.content.document.getElementById("xxx");

・iMacrosの .js からconsole.log で出力する【 .js ファイル】

window.console.log( 'TEST!!!' );

・iMarcorsにエラーがあった時に止まらないようにする

SET !ERRORIGNORE YES

・iMacrosの1命令ごとのタイムアウトを設定する

(ステップごとのタイムアウトを 2秒 に設定する)

SET !TIMEOUT_STEP 2 

・重いページを読み込む時にページの読み込みを待たない

(ページ読み込みのタイムアウトを 1秒 に設定する)

SET !TIMEOUT_PAGE 1

・フォームの入力テキストにスペースを入力する

(スペースの代わりに <SP> を入力します。)
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:myform.php ATTR=* CONTENT=日本語<SP>太郎

・XPathで要素を指定してクリックする

普通に xpath が使えます (xpath式はダブルクォーテーションで囲むこと)

 TAG XPATH="//*[@id='my_id']/tr/td[3]/div/a"

・target="_blank" のリンクでウィンドウを開くとタブ番号がおかしくなる

firefoxで新規ウィンドウをタブで開く場合 target="_blank" をマクロで踏むとタブ番号がおかしくなりその後のマクロでエラーが出ることがあります。 この場合はリンクを押す代わりにリンク先を取得して imacros で画面遷移しましょう

・iMacrosでスクリーンショットを撮る

http://qiita.com/nori4k/items/2e55bc346062d5c490b8

リファレンス http://imacros.doorblog.jp

No.971
05/19 09:38

edit

iMacros
エラー対処
DOM
Firefox

jQueryでフォームの入力値をチェックする(Validation)プラグイン

● jQuery Validation Plugin

http://jqueryvalidation.org

● 日本語での解説

http://kudakurage.hatenadiary.com/entry/20091211/1260521031

● スクリプトの読み込み

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.min.js

● 用意するHTML

<form name="FM">
<input type="text" name="hoge">
<input type="text" name="fuga">
</form>

● バリデーションの定義

$("#FM").validate({
	rules: {
		hoge: {
			required: true
		} ,
		'fuga': {
			required: true
		} 
	} ,
	messages: {
		hoge: {
			required: '入力してください。'
		} ,
		'fuga': {
			required: '入力必須項目です。'
		} 
	}
});

● 標準搭載されているバリデーションメソッド

required – Makes the element required.
remote – Requests a resource to check the element for validity.
minlength – Makes the element require a given minimum length.
maxlength – Makes the element require a given maxmimum length.
rangelength – Makes the element require a given value range.
min – Makes the element require a given minimum.
max – Makes the element require a given maximum.
range – Makes the element require a given value range.
email – Makes the element require a valid email
url – Makes the element require a valid url
date – Makes the element require a date.
dateISO – Makes the element require an ISO date.
number – Makes the element require a decimal number.
digits – Makes the element require digits only.
creditcard – Makes the element require a credit card number.
equalTo – Requires the element to be the same as another one

● 正規表現のバリデーションメソッドを追加する

$.validator.addMethod("myregex", function(value, element, reg_str) {
	var re = new RegExp(reg_str);
	return re.test(value);
}, "入力値が正しくありません");

バリデーション定義に以下のように記述

rules: {
	postal: {
		myregex: '^[0-9\-]+$'
	}
} ,
messages: {
	postal: {
		myregex: '郵便番号を正しく入力してください。'
	}
}

● バリデーションのルールを追加するには関数を定義します

jQuery.validator.addMethod('my_validation_func', function(value, element) {
	if ( XXXXX ){		// XXXXX にエラー判別ロジックを記述
			return true;	// trueが返るとエラーとならない
		}
	else{
		return false;	// falseが返るとエラー
	}
}, 'デフォルトのエラーメッセージ');

● エラー時にエラーのあったフォーム要素自身にエフェクトをかける

$("#FM").validate({
  highlight: function(element, errorClass) {
     $(element).fadeOut(function() {
       $(element).fadeIn()
     })
  }
});

● フォームのハイライトを中止する

標準ではエラー時にフォーム要素に error というクラスが付加されますが、これがいらない場合は 空のfunction() を定義します。

$("#FM").validate({
    highlight: function(element, errorClass) {
    }
});

● 任意のタイミングでバリデーションを実行する

バリデーションの実行タイミングは ・フォーム Submit時 ・エラー後のフォーム内容変更時 ですが、任意のタイミングでバリデーションを実行するには valid()メソッドを実行すればOK。

<form id="FM">
$("#FM").valid();

● 特定のボタンが押された時など任意のタイミングでvalidationを停止する

$("#FM").validate().cancelSubmit = true;

● バリデーション required 条件の条件分岐1

下記のようにすると id="foo" のラジオボタンやチェックボックスがチェックされている時にだけバリデーションを行います

rules: {
  my_name : { required: '#foo:checked' } 
} ,

次のような指定方法があります

指定値 説明
#foo:checked id="foo" のラジオボタンやチェックボックスがチェックされている時
#foo:filled id="foo" のフォーム要素に何か文字(空白以外)が入力されている時
#foo:visible id="foo" のフォーム要素が表示されている時

● バリデーション required 条件の条件分岐2

rules: {
  my_name : { required: function() { return ($('#my_flg').val() === '1' ); } } 
} ,
messages: {
  my_name: { required: 'my_flgが『1』の時はmy_nameは空欄にはできません' } 
}

● フォームが送信され、バリデーションが実行され、その結果がOKだった場合に処理を行う

例 : #submit_button を非活性にします。

  submitHandler: function(form) {
    // ボタンを非活性
    $('#submit_button').prop('disabled', true);
    form.submit();
   }

● 複数あるテキストの全てが空の場合にエラーを出す

・やり方 1.(フォームの nameを同じにして require にする。 )

<input type="text" name="myform[]">
<input type="text" name="myform[]">
<input type="text" name="myform[]">
rules: {
	'myform[]': {
		required: true
	}
} ,
messages: {
	my_name: { required: '少なくともどれか1つに入力してください。' } 
}

・やり方 2.(フォームの nameを別にしたい場合は、 group_require を定義する。 )

クラス .group_require_1 のうちどれか1つに入力があるとヴァリデーションOKとなります。

<input type="text" name="textA" class="group_require_1">
<input type="text" name="textB" class="group_require_1">
<input type="text" name="textC" class="group_require_1">
jQuery.validator.addMethod("group_require", function(value, element, selector_name) {
  var v = '';
  $(selector_name).each(function( index ) {
    v += $( this ).val();
  });
  if ( v ){ return true; }
  else { return false; }
}, "このフィールドは必須です。");

rules: {
	'student_no[]': {
		group_require : '.group_require_1'
	} ,
messages: {
	my_name: {
		group_require: '少なくともどれか1つに入力してください。' 
	} 
}

● バリデーションルールの追加

validate()メソッドで初期化を行った後でルールを追加するにはadd()を使用します。

$("input[name=other_name]").rules("add", { required: '#other_radio:checked' }); //other_radio にチェックが有る時は必須とする

ルールとバリデーションエラーメッセージを合わせて追加する

$( "#myinput" ).rules( "add", {
  required: true,
  minlength: 2,
  messages: {
    required: "Required input",
    minlength: jQuery.validator.format("Please, at least {0} characters are necessary")
  }
});
No.928
12/30 11:50

edit

フォーム
jQuery
エラー対処

<input type="button">にname=”submit” は使用できない

JavaScriptでフォームの送信(submit)を行うときは

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<body>
<form name="orderform" action="http://www.yahoo.co.jp/">
<input type="button" value="go" onclick="document.orderform.submit();">
</form>
</body>
</html>

このように記述しますが、このとき

<input type="button" value="go" onclick="document.orderform.submit();">

<input type="button" name="submit" value="go" onclick="document.orderform.submit();">

とするとエラーになるので注意。

<input name="submit" type="submit">とするとJavaScriptでエラーとなる

<form name="form1">
<input name="submit" type="submit" value="送信">
</form>

<script>
document.form1.submit();
</script>

は Object not found エラーとなります。

name="submit"

を削除するか別の名前に変更するとなおります。

No.526
10/02 11:08

edit

エラー対処

外部JavaScriptによるWindows IE7 の「ランタイムエラー」に対処する

JavaScriptを外部ファイルにしたり、別ドメインのJavascriptを

<script language="JavaScript" src="http://www.testserver.local/test.js"></script>

というふうに呼び出したりすると Windows版IE7 で「ランタイムエラー」が起きることがあります。

この場合の対処方法は

Javascriptが記述してあるファイルの

  • 文字コードを「UTF-8」
  • 改行コードを「CR」+「LF」

にする。

です。これで直ると思います。


またIE7 , IE8 では prompt を使うと

このWebサイトはスクリプト化されたウィンドウを使用して情報を依頼しています。このWebサイトを信頼している場合には、ここをクリックして、スクリプト化されたウィンドウを許可してください

という警告が出て、ユーザーに不必要な動作をさせることになるので気になる場合は使用しないように。

jQuery Alert Dialogs

http://abeautifulsite.net/blog/2008/12/jquery-alert-dialogs/

等で代用するのがいいでしょう。

No.519
02/18 11:59

edit

エラー対処