项目中需要输入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]望高手指点,高分求解。
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]望高手指点,高分求解。
跳转,你在tospeakSound()用的方法可能会有问题如2楼用, onblur 试试...
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帮忙分析分析,谢谢。
还有想请教高手为什么onchange事件,当输入完code时,如果鼠标不在外面点一下,或者用tab跳一下焦点,他就不触发事件呢?
第一种:
function tospeakSound() {
var sLen = <%= sLen %>;
var sbarcode = document.forms[0].s_barcode;
if (sbarcode.value.Trim().length == 0) {return}//为空跳出
document.getElementsByTagName("bgsound")[0].src = '<%= ctxtPath %>/images/music/ding.wav';
}
其他不变,维持你的源码第二种:
onchange改onpropertychange(IE)、oninput(FF)试一下
function tospeakSound() {
debugger;
[code=INIFile]
用onpropertychange,oninput事件解决onchange事件的不足.onchange在用于文本框输入框时,有一个明显的不足. 事件不会随着文字的输入而触发,而是等到文本框失去焦点(onblur)时才会触发. 也就是没有即时性!在IE下,可以用onpropertychange来代替onchange事件,当文本框有任何变化时,能立即触发此事件.
[/code]
但是程序中为什么会造成session丢失了,确实比较郁闷啦。希望高手能给予指点。
在IE浏览器下,
function tospeakSound() {
debugger; //敲上这几个字母,告诉浏览器,运行到此要中断一下
//.......后面是你的脚本
//.......
}刷新界面,会提示你脚本中有异常,是否进入调试模式? 点【是】,进入你机器的默认调试器,按F11单步调试。这样你可以准确找到出错的原因
document.getElementsByTagName("bgsound")[0].src = 'ding.wav';
改了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标签中用不了,所以还是不能达到实时的发出提示音,必须焦点离开以后才行。
参考我15楼的建议
我现在用的我16楼改的这个js重新创建一个bgsound,就没问题;然后我的struts标签中不能用onpropertychange,
我现在用的onkeyup配合onchange一起使用,勉强可以实现我要的效果。但是现在心里还是有个疙瘩,
就是为什么在页面中直接定义了一个bgsound设置他的src为空,然后调用我最开始描述的那个tospeakSound()就会有问题,
而且即便我不调用tospeakSound,提交的时候session的那个键值也掉了,所以我现在在怀疑这个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]不影响我的程序,但是看到这个错误也是很揪心。