厂家给的示例是vbscript  我想改成javascript  但是改后一直出错 大牛门看看哪里的问题
<script id="clientEventHandlersVBS" language="vbscript">
<!--
'控制字定义,控制字指定,控制字的含义请查看本公司网站提供的动态库说明
Const BLOCK0_EN = &H1'读第一块的(16个字节)
Const BLOCK1_EN = &H2'读第二块的(16个字节)
Const BLOCK2_EN = &H4'读第四块的(16个字节)
Const NEEDSERIAL = &H8'仅读指定序列号的卡
Const EXTERNKEY = &H10'用明码认证密码,产品开发完成后,建议把密码放到设备的只写区,然后用该区的密码后台认证,这样谁都不知道密码是多少,需要这方面支持请联系
Const NEEDHALT = &H20'读/写完卡后立即休眠该卡,相当于这张卡不在感应区。要相重新操作该卡必要拿开卡再放上去dim myctrlword
dim mypiccserial
dim myareano
dim authmode
dim mypicckey
dim piccdata0_2 dim retvaldim strls
dim errorno
strls = "adsgdss"
Sub readcard_onclick
'指定控制字
myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY
'指定区号
myareano = 8 '指定为第8区
'批定密码模式
authmode = 1 '大于0表示用A密码认证,推荐用A密码认证

'指定序列号,未知卡序列号时可指定为8个0
mypiccserial="00000000"
'指定密码,以下密码为厂家出厂密码
mypicckey = "ffffffffffff"

strls=IcCardReader.piccreadex(myctrlword, mypiccserial,myareano,authmode,mypicckey)
errorno = mid(strls,1,4)
select case  errorno
case "ER08"
msgbox "寻不到卡"
case "ER09"
msgbox "寻不到卡"
case "ER10"
msgbox "寻不到卡"
case "ER11"
CardIDShower.value = "密码认证错误" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
msgbox "密码认证错误"
case "ER12"
CardIDShower.value = "密码认证错误" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
msgbox "密码认证错误"
case "ER13"
CardIDShower.value = "读卡错误" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
msgbox "读卡错误"

case "ER14"
CardIDShower.value = "写卡错误" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
msgbox "写卡错误"

case "ER21"
msgbox "没找到动态库"

case "ER22"
msgbox "动态库或驱动程序异常"

case "ER23"
msgbox "读卡器未插上或动态库或驱动程序异常"
case "ER24"
msgbox "操作超时,一般是动态库没有反应"
case "ER25"
msgbox "发送字数不够"
case "ER26"
msgbox "发送的CRC错"
case "ER27"
msgbox "接收的字数不够"
case "ER28"
msgbox "接收的CRC错"
case "ER29"
msgbox "函数输入参数格式错误,请仔细查看"
case else'读卡成功,其中ER00表示完全成功,ER01表示完全没读到卡数据,ER02表示仅读该卡的第一块成功,,ER02表示仅读该卡的第一二块成功,这是刷卡太快原因
CardIDShower.value = "读卡成功" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "该区第一块十六进制数据为:" & mid(strls,15,32) & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "该区第二块十六进制数据为:" & mid(strls,47,32) & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "该区第三块十六进制数据为:" & mid(strls,79,32) & Chr(13) & Chr(10)

end select
End Sub
-->
    </script><object classid="clsid:05782014-9FF7-468C-BE96-8EDC73084202" id="IcCardReader" viewastext
        width="0" height="0">
    </object>我改后的javascript是
<script type="text/javascript" id="clientEventHandlersVBS"  for="IcCardReader" event="piccreadex(myctrlword, mypiccserial,myareano,authmode,mypicckey)" >
var IcCardReader=document.getElementById("IcCardReader");
var BLOCK0_EN = "&H1";
var BLOCK1_EN = "&H2";
var BLOCK2_EN = "&H4";
var NEEDSERIAL = "&H8";
var EXTERNKEY = "&H10";
var NEEDHALT = "&H20";var myctrlword;
var mypiccserial;
var myareano;
var authmode;
var mypicckey;
var piccdata0_2 ;var retval;var strls = "adsgdss";
var errorno;
function readCard() {
alert( "密码认证错误");
//指定控制字
myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY;
//指定区号
alert("3");
myareano = 8; //指定为第8区
//批定密码模式
alert("4");
authmode = 1; //大于0表示用A密码认证,推荐用A密码认证
alert("5");
//指定序列号,未知卡序列号时可指定为8个0
mypiccserial="00000000"; alert("6");
//指定密码,以下密码为厂家出厂密码
mypicckey = "ffffffffffff";
alert("7");
strls=IcCardReader.piccreadex(myctrlword, mypiccserial,myareano,authmode,mypicckey);
//errorno = mid(strls,1,4);
alert("1");
errorno = strls.substring(0, 3);
alert("2");
switch(errorno) {
case "ER08":
alert( "寻不到卡");break;
case "ER09":
alert( "寻不到卡");break;
case "ER10":
alert( "寻不到卡");break;
case "ER11":
CardIDShower.value = "密码认证错误" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
alert( "密码认证错误");break;
case "ER12":
CardIDShower.value = "密码认证错误" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
alert( "密码认证错误");break;
case "ER13":
CardIDShower.value = "读卡错误" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
alert( "读卡错误" );break;

case "ER14":
CardIDShower.value = "写卡错误" & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
alert( "写卡错误" );break;

case "ER21":
alert( "没找到动态库");break;

case "ER22":
alert( "动态库或驱动程序异常");break;

case "ER23":
alert( "读卡器未插上或动态库或驱动程序异常" );break;
case "ER24":
alert( "操作超时,一般是动态库没有反应");break;
case "ER25":
alert( "发送字数不够");break;
case "ER26":
alert( "发送的CRC错");break;
case "ER27":
alert( "接收的字数不够");break;
case "ER28":
alert( "接收的CRC错");break;
case "ER29":
alert( "函数输入参数格式错误,请仔细查看");break;
default:        //读卡成功,其中ER00表示完全成功,ER01表示完全没读到卡数据,ER02表示仅读该卡的第一块成功,,ER02表示仅读该卡的第一二块成功,这是刷卡太快原因
//CardIDShower.value = "读卡成功" & Chr(13) & Chr(10)
//CardIDShower.value = CardIDShower.value & strls & Chr(13) & Chr(10)
//CardIDShower.value = CardIDShower.value & "其中错误号为:" & errorno & Chr(13) & Chr(10)
//CardIDShower.value = CardIDShower.value & "卡十六进制序列号为:" & mid(strls,6,8) & Chr(13) & Chr(10)
//CardIDShower.value = CardIDShower.value & "该区第一块十六进制数据为:" & mid(strls,15,32) & Chr(13) & Chr(10)
//CardIDShower.value = CardIDShower.value & "该区第二块十六进制数据为:" & mid(strls,47,32) & Chr(13) & Chr(10)
//CardIDShower.value = CardIDShower.value & "该区第三块十六进制数据为:" & mid(strls,79,32) & Chr(13) & Chr(10)
alert("default");
}
}
</script>

解决方案 »

  1.   

    1、&H1 -> 0x1 十六进制数字
    2、& -> + 字符串连接
    3、mid() -> String.substr()
    4、Chr(13) & Chr(10) -> "\n"大概是这样:
    <script language="jscript">
    //控制字定义,控制字指定,控制字的含义请查看本公司网站提供的动态库说明
    var BLOCK0_EN = 0x1; //读第一块的(16个字节)
    var BLOCK1_EN = 0x2; //读第二块的(16个字节)
    var BLOCK2_EN = 0x4; //读第四块的(16个字节)
    var NEEDSERIAL = 0x8; //仅读指定序列号的卡
    var EXTERNKEY = 0x10; //用明码认证密码,产品开发完成后,建议把密码放到设备的只写区,然后用该区的密码后台认证,这样谁都不知道密码是多少,需要这方面支持请联系
    var NEEDHALT = 0x20; //读/写完卡后立即休眠该卡,相当于这张卡不在感应区。要相重新操作该卡必要拿开卡再放上去function mid(str, start, length) {
    return String(str).substr(start, length);
    }function readcard_onclick() {
    //指定控制字
    var myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY;
    //指定区号
    var myareano = 8; //指定为第8区
    //批定密码模式
    var authmode = 1; //大于0表示用A密码认证,推荐用A密码认证
    //指定序列号,未知卡序列号时可指定为8个0
    var mypiccserial = "00000000";
    //指定密码,以下密码为厂家出厂密码
    var mypicckey = "ffffffffffff"; var strls = IcCardReader.piccreadex(myctrlword, mypiccserial, myareano, authmode, mypicckey)
    var errorno = mid(strls, 1, 4);
    switch (errorno) {
    case "ER08":
    case "ER09":
    case "ER10":
    alert("寻不到卡");
    break;
    case "ER11":
    case "ER12":
    CardIDShower.value = "密码认证错误\n";
    CardIDShower.value += strls + "\n"
    CardIDShower.value += "其中错误号为:" + errorno + "\n";
    CardIDShower.value += "卡十六进制序列号为:" + mid(strls, 6, 8) + "\n";
    alert("密码认证错误");
    break;
    case "ER13":
    CardIDShower.value = "读卡错误" + "\n";
    CardIDShower.value += strls + "\n";
    CardIDShower.value += "其中错误号为:" + errorno + "\n";
    CardIDShower.value += "卡十六进制序列号为:" + mid(strls, 6, 8) + "\n";
    alert("读卡错误");
    break;
    case "ER14":
    CardIDShower.value = "写卡错误" + "\n";
    CardIDShower.value += strls + "\n";
    CardIDShower.value += "其中错误号为:" + errorno + "\n";
    CardIDShower.value += "卡十六进制序列号为:" + mid(strls, 6, 8) + "\n";
    alert("写卡错误");
    break;
    case "ER21":
    alert("没找到动态库");
    break;
    case "ER22":
    alert("动态库或驱动程序异常");
    break;
    case "ER23":
    alert("读卡器未插上或动态库或驱动程序异常");
    break;
    case "ER24":
    alert("操作超时,一般是动态库没有反应");
    break;
    case "ER25":
    alert("发送字数不够");
    break;
    case "ER26":
    alert("发送的CRC错");
    break;
    case "ER27":
    alert("接收的字数不够");
    break;
    case "ER28":
    alert("接收的CRC错");
    break;
    case "ER29":
    alert("函数输入参数格式错误,请仔细查看");
    break;
    default:
    //读卡成功,其中ER00表示完全成功,ER01表示完全没读到卡数据,ER02表示仅读该卡的第一块成功,,ER02表示仅读该卡的第一二块成功,这是刷卡太快原因";
    CardIDShower.value = "读卡成功" + "\n";
    CardIDShower.value += strls + "\n";
    CardIDShower.value += "其中错误号为:" + errorno + "\n";
    CardIDShower.value += "卡十六进制序列号为:" + mid(strls, 6, 8) + "\n";
    CardIDShower.value += "该区第一块十六进制数据为:" + mid(strls, 15, 32) + "\n";
    CardIDShower.value += "该区第二块十六进制数据为:" + mid(strls, 47, 32) + "\n";
    CardIDShower.value += "该区第三块十六进制数据为:" + mid(strls, 79, 32) + "\n";
    break;
    }
    }
    </script>