一个文本框,在输入ID后,触发onblue事件取出对应的名称显示在后面,可是如果输入ID后直接点击提交按钮,这时会先走submit再触发onblue,导致到下一个页面只接到了ID没有取到对应的名称.
这个貌似可以用判断名称是否为空再提交表单实现,但如果是很复杂的页面就比较麻烦了,有没有简单的一点的解决办法呢.
各位JS高手们,帮忙想想呗,谢谢啦!!!!!
这个貌似可以用判断名称是否为空再提交表单实现,但如果是很复杂的页面就比较麻烦了,有没有简单的一点的解决办法呢.
各位JS高手们,帮忙想想呗,谢谢啦!!!!!
解决方案 »
- 自动登录!这问题已经困扰我一星期了!!
- Java如何修改客户端机器上的系统时间
- 表单外面的input能一起提交??
- 关于request.getParameter()的问题
- jsp 支持断点续传的问题.请求高手指点高分回报.
- 调试jsp文件,菜鸟求解
- Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefiniti
- 表单验证效果
- javamail如何能检查出邮箱里有几个新邮件,接收到的邮件正文怎么防止乱码?
- spring+ibatis,注入对象为空的问题,在线等,望各位大神前来指教
- jsp 注入
- ASP可以和JSP一起用么?
在onclick事件里面提交请求form.submit();
在button的onclick的function方法里做判断
在<form onSubmit="return xx();" //xx()是你失去焦触发的function
switch(psProc) {
case "blur": // onblur
fconBlurAction(..,..,..,..,..);
break;
...
"next": // 表单提交
document.frmMain.submit();
break;
default:
}
}
// 下面的IMART标签也许有人知道,是小日本基于struts开发的框架
<IMART type="imIcon" name="下一页" icon="images/standard/new.gif"
href="javascript:fcprocMain('next','','','','','','');">
</IMART>
。。
<!--ID1-->
<IMART type="zsInput" style="text" name="txtID1"
...onblur="javascript:fcprocMain('blur','..','..','..','..','..');">
</IMART>
<!--名称1-->
<IMART type="zsInput" style="text" name="txtName1"..></IMART>
还有若干个ID和名称的文本框会发生onblur。
在触发onblur时,会传当前发生onblur的ID,通过ajaix实现取到对应此ID的名称。
不知道我说明白没有。赫赫
在触发onblur时会传一些参数,到ajax页通过传的条件检索名称,并将结果返回显示在页面相应的控件上。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>SubmitTest</title>
<script type="text/javascript">
function TextChange()
{
var Text1=document.getElementById("Text1");
if(Text1!=null)
{
var Hidden1=document.getElementById("Hidden1");
if(Hidden1!=null)
{
Hidden1.value=Text1.value;
}
}
}
</script>
</head>
<body>
<form action="" id="form1" name="form1" method="post">
<input id="Text1" name="Text1" type="text" onchange="TextChange();" />
<input id="Submit1" name="Submit1" type="submit" value="submit" />
<input id="Hidden1" name="Hidden1" type="hidden" />
</form>
<span id="span1"><%=Request.Form("Hidden1") %></span>
</body>
</html>
楼主不妨再试试,或许是脚本代码有误!
case "change": // onchange
fconBlurAction(..,..,..,..,..);
......
<IMART type="zsInput" style="text" name="txtID1"
...onchange="javascript:fcprocMain('change','..','..','..','..','..');">
</IMART>
case "change": // onchange
fconBlurAction(..,..,..,..,..);
......
<IMART type="zsInput" style="text" name="txtID1"
...onchange="javascript:fcprocMain('change','..','..','..','..','..');">
</IMART>
case "change": // onchange
fconBlurAction(..,..,..,..,..);
......
<IMART type="zsInput" style="text" name="txtID1"
...onchange="javascript:fcprocMain('change','..','..','..','..','..');">
</IMART>
case "change": // onchange
fconBlurAction(..,..,..,..,..);
......
<IMART type="zsInput" style="text" name="txtID1"
...onchange="javascript:fcprocMain('change','..','..','..','..','..');">
</IMART>
case "change": // onchange
fconBlurAction(..,..,..,..,..);
......
<IMART type="zsInput" style="text" name="txtID1"
...onchange="javascript:fcprocMain('change','..','..','..','..','..');">
</IMART>
明白,你的意思是改成onchange,我已经试过了,和onblur是一个效果的。
现在的问题似乎不是onchange和onblur的问题,而是ajax提交要慢于表单提交的问题,无论是onchange还是onblur都是在表单提交成功后才被执行的。
汗,网速太慢,连续提交多次!你是怎样提交到Ajax页的?在何时提交,点击Submit提交到Ajax页还是onblur(或onchange)时提交?
感觉楼主应该是在焦点离开文本框时,提交至Ajax页,如果是这样,可以在onchange事件中,灰化提交按钮,等到获取name值后,再恢复提交按钮,这样就可确保每次在获取name值后在提交表单!
除了上面你说的这个方法,还有没有其他解决方法呢,因为如果这样改就和原有系统其他页面不符,原有系统是没有灰化按钮这个需求的。
现在用户还没有发现这个问题,可能大家都习惯输入后鼠标点一下页面在点按钮吧。
但这始终是个潜在的问题。
前面你说的用按钮灰选来控制,这个我觉得好像不可行,你的意思是如果发生了离开焦点事件在点按钮时就让它灰选不可用是吧,在点击按钮时你怎样获取当前发生了离开焦点事件呢,现在是一点击按钮时就马上触发submit事件了。
什么意思?你可以在onchange事件的方法中这样分3步写:
1.灰化提交按钮
2.获取name值
3.如果取得了name值,就恢复提交按钮这样做有什么问题吗?
我现在解决的方法是,在点提交按钮时会在提交到下一画面前在后台调用验证方法,这个方法里会check你输入的ID在数据库里是否存在,存在才能进入到下一画面,不存在会提示错误信息,所以我就在存在的判断里取出NAME值赋给画面的NAME文本框,这样在提交到下一画面就能够取到对应的NAME值了。