我有一个表单,当你提交它时,它会通过ajax将验证数据发送到另一个php脚本。验证错误在我的表单中以div回显。如果验证通过,也会返回成功消息。
问题是在提交和成功验证后仍然会显示表单。我想在成功后隐藏div。
所以,我编写了这个简单的CSS方法,当从显示表单的页面调用时,该方法工作正常。
问题是我似乎无法通过返回的代码调用hide脚本。我可以返回像
这样的htmlecho "<p>Thanks, your form passed validation and is being sent</p>";
所以我认为我可以简单地在那之后回显另一行
脚本标签内的
echo "window.onload=displayDiv()";(我无法在此处显示)...
并且它会隐藏表单div。
它不起作用。我假设问题是javascript被错误地返回而没有被浏览器解释......
如何通过验证脚本中返回的数据调用页面上的“隐藏”脚本?我可以回显文本,但脚本调用无效。
谢谢!
这是页面上带有表单的脚本......
我可以在表单上调用它来显示/隐藏类似onclick =“displayDiv()”的东西,但是我不希望用户调用它...它已被调用成功验证的结果当我把结果写回div ...
<script language="javascript" type="text/javascript">
function displayDiv()
{
var divstyle = new String();
divstyle = document.getElementById("myForm").style.display;
if(divstyle.toLowerCase()=="block" || divstyle == "")
{
document.getElementById("myForm").style.display = "none";
}
else
{
document.getElementById("myForm").style.display = "block";
}
}
</script>
PS:我正在使用mootools.js库进行表单验证,如果这对语法很重要的话。
AJAX呼叫是:
window.addEvent('domready', function(){ $('myForm').addEvent('submit', function(e) { new Event(e).stop(); var log = $('log_res').empty().addClass('ajax-loading'); this.send({ update: log, onComplete: function() { log.removeClass('ajax-loading'); } }); }); });
Div ID日志是ajax回调文本(验证错误和成功消息)和加载图形出现的位置
答案 0 :(得分:1)
这是How to make JS execute in HTML response received using Ajax?的副本,我提供了所选的解决方案。
var response = "html\<script type=\"text/javascript\">alert(\"foo\");<\/script>html";
var reScript = /\<script.*?>(.*)<\/script>/mg;
response = response.replace(reScript, function(m,m1) {
eval(m1); //will run alert("foo");
return "";
});
alert(response); // will alert "htmlhtml"
答案 1 :(得分:0)
您的AJAX调用应该有一个“成功”回调。看起来您只需在回调中调用displayDiv()
即可。
另请注意,var divstyle = new String();
行不是必需的。字符串在JavaScript中是不可变的,因此您创建一个空字符串对象,在以下行中仍未引用。从document.getElementById()
分配变量时,只需声明变量:
var divstyle = document.getElementById("myForm").style.display;
答案 2 :(得分:0)
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
//Since your making php do the validation, there would be two cases,
//the first case is that the php script is not echoing any thing on success, and
//the other case is that its echoing the error massages which will be assignedxmhttp.responseText
//so we need to check that xmlhttp.resposeText has been asigned a value.
if(xmlhttp.resposeText){
document.getElementById(displayContainers_id).innerHTML=xmlhttp.responseText;
}
}