最近在做一个B/S系统,遇到一问题:客户要求只能刷卡不能手动输入
到网上搜一下,没有找到好的方法,最后只能用延时来取巧,虽不能完全实现,但也还可以,呵呵
因为刷卡时触发了事件keypress、keyup、onkeydown,所以不能从这方面下手;
鉴于手动输入与刷卡的速度不一样,在以上onkeyup事件中加了一个延时:
<html>
<head>
<script>
//输入触发事件,延时0.5s失去焦点,然后进入焦点时清空文本框,达到目的
function test()
{
setTimeout("lostblur()",500);
}
//失去焦点
function lostblur()
{
document.getElementById("CardID").blur();
}
function getblur()
{
document.getElementById("CardID").value="";
}
</script>
</head>
<body>
<div>
请输入卡号:<input id="CardID" type="text" onkeyup="test();" onfocus="getblur();" />
</div>
</body>
</html>
第一次写经验,写得不是很明白,见谅!!!
可能是写的不是很明白,很多博友没看懂,有必要解释一下:
以下是刷卡时触发的事件:
$(document).ready(function() {
$("#MemPanel_Text_CardID").keypress(function(e) {
var keyAscii = window.event ? e.keyCode : e.which;
//if (keyAscii == 13) {
// MemPanel_SearchMem();
}
});
$("#MemPanel_textBox_Key").keyup(function(e) {
var keyAscii = window.event ? e.keyCode : e.which;
//if (keyAscii == 13) {
// $("#MemPanel_button_Search").click();
// }
});
});
当然也会触发keydown事件。
原本想在这几个事件上做手脚,想让输入无效,但这样也会让刷卡也无法输入,因为刷卡时是用这几个事件来输入的,也就是刷卡是通过这几个事件来实现刷卡的!!不知道说的明不明白,有用过刷卡机的博友应该会明白吧,呵呵~~~
有人说用readonly="readonly",本人试过,这样连刷卡也会不能输入了。
找不到好的方法,所以只好用上面所说的方法来取巧了,因为人为的手动输入比刷卡慢,比如输入10位数字,刷卡只用1 秒,而手动输入却要用3到4秒或更久。
刷卡时(比如刷出的是10位数),那么就要触发10次keypress,keydown,keyup事件,所以想出了一个取巧的方法,就是利用时间上的差别来达到目的。
如果刷卡要1秒,则定时1秒,那么1秒内keypress,keydown,keyup事件就会发生10次,向文本框输入10个数字,刚好刷卡完成,那么1秒后文本框就失去焦点
如果是手动输入,要用3到4秒,则还没有输入完成就文本框就失去了焦点,当你想继续输入时,文本框获得焦点时,原先输入文本框内的数字清空,这个就永远无法手动输入完整的卡号(10位字)。。。
原理大概是这样,不能完全实现,只能取个巧,解释得不是很清楚,见晾!!!