请高手帮忙解决 -- onkeyUp和onclick事件冲突问题?

diven_net 2009-05-17 06:03:59
输入框中用onkeyUp事件调用方法获取值
<input type="text" name="accountId" id="accountId_id" onkeyup="displayId();showLayer('search_suggest',this);" autocomplete="off"/>
<div id="search_suggest" style="display: none; position: absolute;" ></div>

<script type="text/javascript">
function displayId()
{
var id = trim(document.getElementById("accountId_id").value);
if(id.length == 0)
{
return false;
}
else
{
//请求的地址
var url = 'Ajax_Autocompleter.action';
var param = trim(Form.Element.serialize('accountId'));
var myAjax = new Ajax.Request(
url,
{
method:'post',
parameters:param,
onComplete: processResponse1,
asynchronous:true
});
}
}
function processResponse1(request)
{
var ids = new Object();
ids = request.responseText.parseJSON(); //获取数据库返回值

var ss = document.getElementById("search_suggest");
ss.style.cursor = "pointer";
ss.innerHTML = "";

var objInput = document.getElementById("accountId_id");

var selectedIndex=-1;

if(ids.vc.length != 0)
{
for(var i=0; i< ids.vc.length ; i++ )
{
var suggest = "<div onmouseover=\"this.className='sman_selectedStyle'\"";
suggest += " onmouseout=\"this.className=''\"";
suggest += " onmousedown=\"document.getElementById('accountId_id').value='" + ids.vc[i] + "'\">";
suggest += "" + ids.vc[i] + "</div>";
ss.innerHTML += suggest;
ss.style.display = "block";
}
}else{
ss.style.display = "none";
}
//文本框失去焦点
objInput.onblur=function(){
ss.style.display='none';
}
//文本框按键抬起
objInput.onkeyup=checkKeyCode; /////////////此处onkeyUp事件和上面输入框中onkeyup事件发生冲突,请路过的朋友帮忙解决,谢谢!!!
//文本框得到焦点
objInput.onfocus=checkAndShow;
function checkKeyCode()
{
var ie = (document.all)? true:false
if (ie){
var keyCode=event.keyCode
if (keyCode==40||keyCode==38){ //下上
var isUp=false
if(keyCode==40) isUp=true ;
chageSelection(isUp);
}else if (keyCode==13){//回车
outSelection(selectedIndex);
}else{
//checkAndShow();
}
}
}

function outSelection(Index){
objInput.value = ss.children[Index].innerText;
ss.style.display='none';
}

function chageSelection(isUp)
{
if (ss.style.display=='none'){
ss.style.display='';
}else{
if(isUp)
selectedIndex++
else
selectedIndex--
}
var maxIndex = ss.children.length-1;
if (selectedIndex < 0){selectedIndex=0}
if (selectedIndex > maxIndex) {selectedIndex = 0}
for (var i = 0;i <= maxIndex ; i++)
{
if (i==selectedIndex){
ss.children[i].className="sman_selectedStyle";
}else{
ss.children[i].className="";
}
}
}
}
</script>

当上面显示出的列表值用上下方向键选中后,按回车即可选中值。但是我在下面<s:submit name="submit" value=" 提交 " align="center" onclick="return goDo();" theme="simple"></s:submit>中又去onclick事件发生冲突(为方便用户操作,需要用submit回车即向后台提交数据),搞死我了,不知道怎么解决,烦请高手帮忙,诚谢!!!

...全文
419 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
diven_net 2009-05-20
  • 打赏
  • 举报
回复
再次感谢showbo,非常非常的谢谢你
也感谢webmm,谢谢你的帮忙

我脑子太愚木,卡在那不知道转弯,还是没有细心的去理解,以后我要加以改正,自己多用心去想
diven_net 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 showbo 的回复:]
你代码都没看完全。。。。自己再看过
[/Quote]
太感谢你的帮助,你说的代码没看完全,不知道指的是我哪地方没理解你的意思,烦请你说明,谢谢!!!
Go 旅城通票 2009-05-19
  • 打赏
  • 举报
回复
你代码都没看完全。。。。自己再看过
diven_net 2009-05-19
  • 打赏
  • 举报
回复
而且发现你代码好像有问题啊,当第一次完成sugguest后你设置了accountId_id的onkeyup事件,这样就覆盖原来的了,那么就不能使用再次使用sugguest了,你应该是对search_suggest添加onkeyup的事件的吧??

======================================================
是覆盖原来的onkeyup事件了,但是我对search_suggest添加onkeyup事件,依然没用

//文本框按键抬起
var ss = document.getElementById("search_suggest");
ss.onkeyup=checkKeyCode; //此处对search_suggest添加onkeyup事件,问题还是没有解决

function checkKeyCode()
{
var ie = (document.all)? true:false
if (ie){
var keyCode=event.keyCode
if (keyCode==40||keyCode==38){ //下上
var isUp=false
if(keyCode==40) isUp=true ;
chageSelection(isUp);
}else if (keyCode==13){//回车
outSelection(selectedIndex);
}else{
//checkAndShow();
}
}
}
function chageSelection(isUp)
{
if (ss.style.display=='none'){
ss.style.display='';
}else{
if(isUp)
selectedIndex++
else
selectedIndex--
}
var maxIndex = ss.children.length-1;
if (selectedIndex < 0){selectedIndex=0}
if (selectedIndex > maxIndex) {selectedIndex = 0}
for (var i = 0;i <= maxIndex ; i++)
{
if (i==selectedIndex){
ss.children[i].className="sman_selectedStyle";
objInput.value = ss.children[Index].innerText; //和onclick事件冲突问题,在文本框内回车时取消默认提交表单动作,这个思路是对的,不过我在使用上面的方法时没有在文本框回车取消提交表单动作, 不过此处我偷了个懒,在键盘上下键移动的时候,我就把选择的值放到文本框内了,这样回车就直接提交,因为这个是查询,直接回车还更方便了。但能取消提交表单的动作,就更好了,不知道该怎么弄?
}else{
ss.children[i].className="";
}
}
}

请路过的朋友帮忙看看吧,好几天没解决,急死我了
diven_net 2009-05-19
  • 打赏
  • 举报
回复
衰。。。。。。
再给keyup添加一个鼠标上下移动的事件,不知道怎么写
webmm 2009-05-19
  • 打赏
  • 举报
回复
1....为什么不用鼠标移到获取值非要用方向键呢,-_- 阻止表单提交的话倒是好说,楼上也有处理,或者你把type=sumbit改成一部按钮也可以,然后验证OK再 form.sumit();但是你那个onkeyup如果是不同输入框有冲突又利用方向键可以切换不同的输入框,这个思路就好像不是太合理...什么地方要这样用呢...

2.如果你的确要这么用的,能不能不用onkeyup,而只是获取方向键的keycode,判断是什么方向后,根据目前的onfocus获取目前的input的id,根据这个id + 方向键的keycode 得到转移到另外哪个id 的input,主动赋予onfocus

3.如果我说的根本不搭界,就无视我吧...
vvviop 2009-05-19
  • 打赏
  • 举报
回复
onkeyup 改成 onkeypress
Go 旅城通票 2009-05-19
  • 打赏
  • 举报
回复
不过好像在keyup扑捉不了事件。。。


改为keydown可以

<form method='get'>
输入回车不提交:<input type="text" onkeydown="KeyUp(event)"/><br/>
 输入回车提交:<input type="text"/><br/>
<input type="submit" value="提交"/>
</form>
<script>
function KeyUp(e){
if(e.keyCode!=13)return;
if(document.all){
e.keyCode=0;
e.returnValue=false;
}
else e.preventDefault();
}
</script>
Go 旅城通票 2009-05-19
  • 打赏
  • 举报
回复
你不要覆盖
<input type="text" name="accountId" id="accountId_id" onkeyup="displayId();showLayer('search_suggest',this);" autocomplete="off"/>
的keyup事件,

而是再给keyup添加一个鼠标上下移动的事件,对div使用keyup和keydown没意义。。。。

然后就使用
event.keyCode=0;
event.returnValue=false;
在input中输入会车时阻止表单提交
diven_net 2009-05-19
  • 打赏
  • 举报
回复
event.keyCode=0;
event.returnValue=false;
用这个还是没有取消默认提交表单动作

其实这个回车是在div里面的回车,我觉得把<div id="search_suggest" style="display: none; position: absolute;" > </div> 放在form表单外面应该回车选择的时候就不会提交表单了,这样可能就解决onclick问题了。


最主要的是onkeyup事件冲突问题没解决,急。。。。。。。。。不知道怎么弄
Go 旅城通票 2009-05-19
  • 打赏
  • 举报
回复
.....
//=================在文本框内回车时取消默认提交表单动作,如果是w3c浏览器使用 e.preventDefault();,e为接受事件的变量
event.keyCode=0;
event.returnValue=false;
diven_net 2009-05-18
  • 打赏
  • 举报
回复
请帮帮我吧
Go 旅城通票 2009-05-18
  • 打赏
  • 举报
回复
取消你上下移动的enter事件试试

而且发现你代码好像有问题啊,当第一次完成sugguest后你设置了accountId_id的onkeyup事件,这样就覆盖原来的了,那么就不能使用再次使用sugguest了,你应该是对search_suggest添加onkeyup的事件的吧??

objInput.onkeyup=checkKeyCode; /////////////此处onkeyUp事件和上面输入框中onkeyup事件发生冲突,请路过的朋友帮忙解决,谢谢!!!


function checkKeyCode() 
{
var ie = (document.all)? true:false
if (ie){
var keyCode=event.keyCode
if (keyCode==40||keyCode==38){ //下上
var isUp=false
if(keyCode==40) isUp=true ;
chageSelection(isUp);
}else if (keyCode==13){//回车
outSelection(selectedIndex);
//=================在文本框内回车时取消默认提交表单动作,如果是w3c浏览器使用 e.preventDefault();,e为接受事件的变量
event.keyCode=0;
event.returnValue=false;
}else{
//checkAndShow();
}
}
}
diven_net 2009-05-17
  • 打赏
  • 举报
回复
传参数不行
eyeapple 2009-05-17
  • 打赏
  • 举报
回复
<input type="text" name="accountId" id="accountId_id" onkeyup="displayId();showLayer('search_suggest',this);" autocomplete="off"/>

onkeyup="displayId();传个参数试试

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧