function getMeta() {
var img = new Image();
var verif = true;
img.onload = function() {
if (this.width != 468 && this.height != 60) {
alert('error : only these image sizes are accepted : 468x60');
return false;
} else
alert('loaded successfully');
};
img.onerror = function() {
alert('error : this is not a valid image');
return false;
};
img.src = document.getElementById('t1').value;
return true;
}

<form action="https://www.paypal.com/cgi-bin/webscr"
method="post" target="_blank" id="form1"
onsubmit="return getMeta();">
&#13;
函数img.onload不会返回任何内容 我需要返回值true或false。
我想在表单的onsubmit中使用返回值。 有人可以帮帮我吗?
答案 0 :(得分:0)
一般参考,您应该阅读How do I return the response from an asynchronous call?。这描述了获取异步结果的一般问题。阅读完之后,您将有希望了解为什么您不能仅从.onload()
返回一个值并期望它是getMeta()
的返回值。但是,这个答案本身并不能为您的具体问题提供完整的解决方案。
因此,现在让我们更详细地描述您的代码中发生了什么,然后讨论修复它的选项。
img.onload
是异步的。这意味着它会在getMeta()
已经返回很久之后的某个时间结束。
与此同时,你正试图这样做:
onsubmit="return getMeta();"
这使得您看起来像是在尝试使用异步结果来确定表单是否应该提交。那根本不可能那样做。异步结果尚不清楚,您的getMeta()
函数始终返回true
。
您可以重新构建代码,以便它不会同步提交。您加载图像,并且只有在加载图像时,您是向用户显示错误还是手动提交表单。这有潜在的用户界面问题,因为用户点击提交按钮并且没有立即发生任何事情(因为您正在加载图像以进行验证)。这让用户不知道发生了什么。他们通常认为它不起作用,要么再次按下提交按钮,要么认为它刚好坏了。因此,您通常需要一堆UI来禁用该按钮,提供您现在正在验证图像的反馈,然后在图像未验证时提供相应的错误消息,并且通常在您执行时禁用其他UI控件正在验证图像,以便当您正在尝试决定是否要提交此表单时,用户不会离开并执行其他操作。
所以,修复提交:
在你的onsubmit处理程序中,你总是会返回false
,因此表单永远不会立即提交。然后,在onload()
处理程序中(在图像加载后),您将手动提交表单或显示错误。
答案 1 :(得分:0)
最后,我找到了解决方案,就像所说的jfriend00在成功加载图片时手动提交表单,并将“返回false”添加到“onsubmit”以阻止表单提交时出错。谢谢大家
<script>
function getMeta(){
var img = new Image();
img.onload = function(){
if (this.width != 468 && this.height != 60)
{alert( 'error : only these image sizes are accepted : 468x60' );
return false;}
else
alert( 'loaded successfully' );
document.getElementById('form1').submit();
};
img.onerror = function() {alert( 'error : this is not a valid image');
return false;
};
img.src = document.getElementById('t1').value;
return true;
}
</script>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank" id="form1" onsubmit="getMeta(); return false;">