[解決済み] 値が関数であるかどうかのテスト
質問
フォームの
onsubmit
の値が関数であるかどうかをテストする必要があります。 フォーマットは通常
onsubmit="return valid();"
. これが関数かどうか、そして呼び出し可能かどうかを判断する方法はありますか? typeofを使用しても、それが文字列であることを返すだけで、あまり役に立ちません。
EDIT
: もちろん、"return valid();"が文字列であることは理解しています。 私は
replace
dして、"valid();"、さらには"valid()"としました。 私はこれらのいずれかが関数であるかどうかを知りたいのです。
EDIT : これは私の問題を説明するのに役立つかもしれない、いくつかのコードです。
$("a.button").parents("form").submit(function() {
var submit_function = $("a.button").parents("form").attr("onsubmit");
if ( submit_function && typeof( submit_function.replace(/return /,"") ) == 'function' ) {
return eval(submit_function.replace(/return /,""));
} else {
alert("onSubmit is not a function.\n\nIs the script included?"); return false;
}
} );
編集2 : これが新しいコードです。 form.submit()を呼んでも、既存のonsubmitsが起動しないので、やはりevalを使う必要があるようです。
var formObj = $("a.button").parents("form");
formObj.submit(function() {
if ( formObj[0].onsubmit && typeof( formObj.onsubmit ) == 'function' ) {
return eval(formObj.attr("onsubmit").replace(/return /,""));
} else {
alert("onSubmit is not a function.\n\nIs the script included?");
return false;
}
} );
これをよりよく行う方法についての提案?
どのように解決するのですか?
<ブロッククオート送信ボタンをアンカーリンクに置き換えています。 アンカーリンクに置き換えています。というのも form.submit()を呼び出しても を呼び出すとonsubmitが有効にならないので、それを見つけて、自分で 自分でeval()しています。しかし、私は その関数が存在するかどうかを ただ、そこにあるものをeval()する前に、その関数が存在するかどうかを確認したいのです。- gms8994
<script type="text/javascript">
function onsubmitHandler() {
alert('running onsubmit handler');
return true;
}
function testOnsubmitAndSubmit(f) {
if (typeof f.onsubmit === 'function') {
// onsubmit is executable, test the return value
if (f.onsubmit()) {
// onsubmit returns true, submit the form
f.submit();
}
}
}
</script>
<form name="theForm" onsubmit="return onsubmitHandler();">
<a href="#" onclick="
testOnsubmitAndSubmit(document.forms['theForm']);
return false;
"></a>
</form>
EDIT : testOnsubmitAndSubmit関数でパラメータfが不足しています。
上記は
onsubmit
属性を指定しても、JavaScriptで指定しても動作するはずです。
document.forms['theForm'].onsubmit = onsubmitHandler;
関連
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] JavaScriptでドロップダウンリストの選択値を取得する
-
[解決済み] 配列を値でコピーする
-
[解決済み] JavaScriptで値がオブジェクトであるかどうかを確認する
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] typeofとinstanceofの違いは何ですか、また、どのような場合にどちらを使うべきですか?
-
[解決済み] JavaScriptのtoString()関数をオーバーライドして、デバッグ用に意味のある出力を提供することは可能でしょうか?
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる