高分向高手求救!关于回车跳焦点的问题!

jackingod 2009-06-29 09:12:36
项目中需要输入code,按回车自动提交页面。本人做的函数如下:

function testEnterToTab(event,flg) {
var e = event?event:window.event;
if(e.keyCode == 13){
if ('s' == flg) {
doSearchS_Barcode();//提交相关函数
} else if ('b' == flg) {
doSearchB_Barcode();//提交页面相关函数
}
}
}

调用如下:

<html:text name="CollectionLendForm" styleId="s_barcode" property="s_barcode" size="18" maxlength="32" style="width:200px;" onkeydown="testEnterToTab(event, 's');" tabindex="1"/>

可以正常运行。
现在客户要求在输入完code以后,能够给出提示音,类似消息框的报警音。
于是本人又做函数如下:

function tospeakSound() {
var sLen = <%= sLen %>;
var sbarcode = document.forms[0].s_barcode;
if (sbarcode.value.Trim().length == sLen) {
document.getElementsByTagName("bgsound")[0].src = '<%= ctxtPath %>/images/music/ding.wav';
}
}

然后在对应的控件中追加上面这个方法:

<html:text name="CollectionLendForm" styleId="s_barcode" property="s_barcode" size="18" maxlength="32" style="width:200px;" onkeydown="testEnterToTab(event, 's');" onchange="tospeakSound();" tabindex="1"/>

当输入完code焦点离开时,确实发出了提示音,但是当暗回车提交页面时,出现错误如下:
错误: uncaught exception: [Exception... "Cannot modify properties of a WrappedNative" nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)" location: "JS frame :: chrome://global/content/bindings/autocomplete.xml :: onxblpopuphiding :: line 834" data: no]

望高手指点,高分求解。
...全文
577 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
cddhy 2011-01-24
  • 打赏
  • 举报
回复
这个问题我也遇到了。

应该和你的bgsound无关。
uncaught exception: [Exception... "Cannot modify properties of a

WrappedNative" nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)"

location: "JS frame :: chrome://global/content/bindings/autocomplete.xml ::

onxblpopuphiding :: line 825" data: no]

不影响我的程序,但是看到这个错误也是很揪心。
jackingod 2009-07-01
  • 打赏
  • 举报
回复
谢谢楼上老兄,不过我用的不是asp,我是用的java,框架是struts,所以没有你所说的Globe.ASA,session好像也没完全掉,是某个键值为null了。现在暂时是实现了效果。我照你说的换个目录看看。
toury 2009-07-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 Wizard_zj 的回复:]
ctxPath是自己定义的一个变量,是服务器根目录,这个没有问题的。
我现在用的我16楼改的这个js重新创建一个bgsound,就没问题;然后我的struts标签中不能用onpropertychange,
我现在用的onkeyup配合onchange一起使用,勉强可以实现我要的效果。但是现在心里还是有个疙瘩,
就是为什么在页面中直接定义了一个bgsound设置他的src为空,然后调用我最开始描述的那个tospeakSound()就会有问题,
而且即便我不调用tospeakSound,…
[/Quote]
你网站里几个GLOBE.ASA?如果只有一个的话,session丢失找其他原因;如果是几个、且分别在不同的目录下就容易出这样的问题。这就是我建议你把wav文件放到当前目录来的原因。

session丢失是顽疾,要找根源因素太多了....
jackingod 2009-07-01
  • 打赏
  • 举报
回复
ctxPath是自己定义的一个变量,是服务器根目录,这个没有问题的。
我现在用的我16楼改的这个js重新创建一个bgsound,就没问题;然后我的struts标签中不能用onpropertychange,
我现在用的onkeyup配合onchange一起使用,勉强可以实现我要的效果。但是现在心里还是有个疙瘩,
就是为什么在页面中直接定义了一个bgsound设置他的src为空,然后调用我最开始描述的那个tospeakSound()就会有问题,
而且即便我不调用tospeakSound,提交的时候session的那个键值也掉了,所以我现在在怀疑这个bgsound是不是有所诡异?
不得其解。
gengzhw 2009-07-01
  • 打赏
  • 举报
回复
关注
toury 2009-06-30
  • 打赏
  • 举报
回复
你把那个ding.wav放到当前目录来,然后:
document.getElementsByTagName("bgsound")[0].src = 'ding.wav';
toury 2009-06-30
  • 打赏
  • 举报
回复
你的ctxtPath 打印出来是什么路径?问题会不会在这里造成的?
参考我15楼的建议
jackingod 2009-06-30
  • 打赏
  • 举报
回复
谢谢楼上的兄弟,我现在换了另外一个方法,关键好像还是bgsound造成了session的键值丢掉了,具体原因不太清楚。
改了tospeakSound()方法:

function tospeakSound() {
var sLen = <%= bLength %>;
var sbarcode = document.forms[0].s_barcode;
if (sbarcode.value.Trim().length == sLen) {
var bgTest = document.createElement("bgsound");
bgTest.src = "<%= ctxtPath %>/images/music/Bar.wav";
document.body.appendChild(bgTest);
}
}

还有那个onpropertychange,oninput好像在我的struts标签中用不了,所以还是不能达到实时的发出提示音,必须焦点离开以后才行。
jackingod 2009-06-29
  • 打赏
  • 举报
回复
这是那两个提交方法,应该没错。

//query b_barcode
function doSearchB_Barcode(){
var b_barcode = document.CollectionLendForm.b_barcode;
if(!ChkChr('<bean:message key="caption.library.master.booksmaintenace.b_barcode" />',b_barcode.value,0,0,1)){
b_barcode.focus();
return false;
}
if (b_barcode.value.match(/[^0-9]{1}/)) {
alert('<bean:message key="caption.library.master.booksmaintenace.b_barcode.err1"/>');
b_barcode.focus();
return;
}

document.forms[0].actionHidden.value="<bean:message key="caption.library.lend.submit_query_b_barcode"/>";
document.forms[0].submit();
}
//query s_barcode
function doSearchS_Barcode(){
document.forms[0].actionHidden.value="<bean:message key="caption.library.lend.submit_query_s_barcode"/>";
document.forms[0].submit();
}

其实我要的效果是用户输入后,就发出提示音,但是用了onchange事件好像但输入完,并没有触发事件,只有我在输入框外点鼠标时,才会触发,所以我描述的时候用了焦点离开。
现在我又试了onblur事件。还是当焦点离开时会触发事件发出提示音,但是当按回车提交页面时,页面就报错了。而且肯定带来了新的问题,那就是本来回车转焦点提交时,按回车的时候js方法testEnterToTab()就把焦点转移了,那样又会引发tospeakSound();
希望高手能解答,cgisir帮忙分析分析,谢谢。
monexus 2009-06-29
  • 打赏
  • 举报
回复
应该是doSearchS_Barcode里有错误把
cgisir 2009-06-29
  • 打赏
  • 举报
回复
onchange没用过, 考虑你的逻辑,可能是因为你在按回车后, FORM提交,这时input值清空onchange触发, 但在这时页面已经
跳转,你在tospeakSound()用的方法可能会有问题。。。

如2楼用, onblur 试试...
ccsnetmm 2009-06-29
  • 打赏
  • 举报
回复
不知道对不对:当用户在文本框中键入的时候不是可以取到那个键值吗?如果用户输入的是回车,就将焦点放置到需要的文本框上.
mydeman 2009-06-29
  • 打赏
  • 举报
回复
失去焦点的事件应该是onblur吧?

在body中加入对keydown事件的监控,如果按键是回车,就提交。
jackingod 2009-06-29
  • 打赏
  • 举报
回复
没有高手回答吗?
jackingod 2009-06-29
  • 打赏
  • 举报
回复
哦,谢谢楼上大哥,现在就是session丢失了某个键值。具体原因不明啦。如果不做这个提示音的话,程序还是没问题啦。
toury 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Wizard_zj 的回复:]
找出点线索来了,是session丢失了。但是为什么会造成session丢失,原因还没找到,因为没加这个报警音的话,程序按回车提交是正常的,没问题的。谢谢楼上大哥,你说的我也参考一下,还有关于js的debug我现在只知道alert和用ff看报错消息,关于你说的debugger是什么东东啦?怎样调试好?
[/Quote]

在IE浏览器下,
function tospeakSound() {
debugger; //敲上这几个字母,告诉浏览器,运行到此要中断一下
//.......后面是你的脚本
//.......
}

刷新界面,会提示你脚本中有异常,是否进入调试模式? 点【是】,进入你机器的默认调试器,按F11单步调试。这样你可以准确找到出错的原因

jackingod 2009-06-29
  • 打赏
  • 举报
回复
发现不是session丢失而是session中的一个键值丢失了。望哪位高手指点一下。
jackingod 2009-06-29
  • 打赏
  • 举报
回复
查了一下资料,了解到:
[code=INIFile]
用onpropertychange,oninput事件解决onchange事件的不足.

onchange在用于文本框输入框时,有一个明显的不足. 事件不会随着文字的输入而触发,而是等到文本框失去焦点(onblur)时才会触发. 也就是没有即时性!

在IE下,可以用onpropertychange来代替onchange事件,当文本框有任何变化时,能立即触发此事件.
[/code]
但是程序中为什么会造成session丢失了,确实比较郁闷啦。希望高手能给予指点。
jackingod 2009-06-29
  • 打赏
  • 举报
回复
找出点线索来了,是session丢失了。但是为什么会造成session丢失,原因还没找到,因为没加这个报警音的话,程序按回车提交是正常的,没问题的。谢谢楼上大哥,你说的我也参考一下,还有关于js的debug我现在只知道alert和用ff看报错消息,关于你说的debugger是什么东东啦?怎样调试好?
toury 2009-06-29
  • 打赏
  • 举报
回复
另外,你可以单步跟踪一下问题出在什么地方。例如在IE下,
function tospeakSound() {
debugger;
。。。。。。。。。。。。
加载更多回复(2)

87,901

社区成员

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

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