Gle*_*rry 85 javascript typeof onsubmit
我需要测试一个表单的值是否onsubmit
是一个函数.格式通常是onsubmit="return valid();"
.有没有办法判断这是否是一个函数,如果它是可调用的?使用typeof只返回它是一个字符串,这对我没有多大帮助.
编辑:当然,我明白"返回有效();" 是一个字符串.我把replace
它归结为"valid();",甚至是"valid()".我想知道其中任何一个是否是一个功能.
编辑:这里有一些代码,可能有助于解释我的问题:
$("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;
}
} );
Run Code Online (Sandbox Code Playgroud)
编辑2:这是新代码.似乎我仍然需要使用eval,因为调用form.submit()不会触发现有的onsubmits.
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;
}
} );
Run Code Online (Sandbox Code Playgroud)
关于如何更好地做到这一点的建议?
Gra*_*ner 80
我正在用一个锚链接替换一个提交按钮.因为调用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>
Run Code Online (Sandbox Code Playgroud)
编辑:函数testOnsubmitAndSubmit中缺少参数f
无论您是分配onsubmit
HTML属性还是在JavaScript中分配它,上述内容都应该有效:
document.forms['theForm'].onsubmit = onsubmitHandler;
Run Code Online (Sandbox Code Playgroud)
art*_*emb 55
尝试
if (this.onsubmit instanceof Function) {
// do stuff;
}
Run Code Online (Sandbox Code Playgroud)
Pab*_*era 12
您可以简单地使用typeof
运算符和三元运算符:
onsubmit="return typeof valid =='function' ? valid() : true;"
Run Code Online (Sandbox Code Playgroud)
如果它是一个函数,我们调用它并返回它的返回值,否则只返回 true
编辑:
我不太确定你真正想做什么,但我会试着解释可能会发生什么.
当您onsubmit
在html中声明代码时,它会变成一个函数,因此可以从JavaScript"world"调用它.这意味着这两种方法是等价的:
HTML: <form onsubmit="return valid();" />
JavaScript: myForm.onsubmit = function() { return valid(); };
Run Code Online (Sandbox Code Playgroud)
这两个函数都是函数,都可以调用.您可以使用typeof
运算符测试任何那些应该得到相同结果的运算符:"function"
.
现在,如果您通过JavaScript将字符串分配给"onsubmit"属性,它将保持为字符串,因此不可调用.请注意,如果您typeof
对它应用运算符,您将获得"string"
而不是"function"
.
我希望这可以澄清一些事情.然后,如果你想知道这样的属性(或者问题的任何标识符)是否是一个函数和可调用的,那么typeof
运算符应该这样做.虽然我不确定它是否可以跨多个帧正常工作.
干杯
你使用的是什么浏览器?
alert(typeof document.getElementById('myform').onsubmit);
Run Code Online (Sandbox Code Playgroud)
这function
在IE7和FireFox中给了我" ".
归档时间: |
|
查看次数: |
103658 次 |
最近记录: |