注册 登录
编程论坛 VFP论坛

模拟网页输入框的切换焦点

sych 发布于 2022-02-21 13:21, 4113 次点击
网址:
https://inv-veri.chinatax.
模拟输入发票代码 051002000511
如果输入错误输入框后面会显示“×发票代码有误!”,如果输入正确在显示“√”
自动输入发票代码后,如何让表单立即显示“√”of.wb.Document.getElementByid("fpdm").value="051002000511"

下面是全部代码
of = CREATEOBJECT("webForm")
of.show
susp
*READ EVENTS
RETURN

DEFINE CLASS webForm AS Form
    ShowWindow = 2
    WindowState = 2
    ADD OBJECT WB AS Olecontrol WITH Width=this.width,Height=this.height,Anchor=15,OleClass="Shell.Explorer.2",Visible=.T.
    PROCEDURE UnLoad
        CLEAR EVENTS
    ENDPROC
    PROCEDURE Init
        this.WB.Silent = .T.
        this.WB.Navigate("https://inv-veri.chinatax.)
    ENDPROC
ENDDEFINE
33 回复
#2
sych2022-02-21 14:27
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#3
sych2022-02-22 10:26
of.wb.Document.getElementByid("fpdm").value="051002000511"
用这条语句赋值后,怎么让后面的√立即显示出来?
#4
laowan0012022-02-22 10:41
加个回车试试
#5
sych2022-02-22 11:02
原来的网页应该是在输入的时候执行了什么计算,我是想能不能强制网页计算,这样就和手工输入是一样的效果
#6
吹水佬2022-02-22 11:30
先看看能正常输入了没有
可能是防这防哪的禁止了用脚本代码自动输入
试试输入后中断一下看看就清楚,如:
of.wb.Document.getElementByid("fpdm").value="051002000511"
MESSAGEBOX(of.wb.Document.getElementByid("fpdm").value)
之后还能在页面看到输入的东西吗
#7
sych2022-02-22 13:44
刚检查了一次,确实输入进去了,可以取到这个数值
#8
吹水佬2022-02-22 14:40
以下是引用sych在2022-2-22 13:44:48的发言:

刚检查了一次,确实输入进去了,可以取到这个数值

返回之后还能在页面看得到吗
#9
吹水佬2022-02-22 15:53
试了一下是可以看到的
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

程序代码:
of = CREATEOBJECT("webForm")
of.show
READ EVENTS
RETURN

DEFINE CLASS webForm AS Form
    ShowWindow = 2
    WindowState = 2
    ADD OBJECT cmd1 as commandbutton WITH left=10,top=10,Enabled=0
    ADD OBJECT WB AS Olecontrol WITH left=0,top=40, Width=this.width,Height=this.height-40,Anchor=15,OleClass="Shell.Explorer.2",Visible=.T.
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
    PROCEDURE Init
        this.WB.Silent = 0  &&提示安全证书问题警告
        this.WB.Navigate("https://inv-veri.chinatax.)
    ENDPROC
    PROCEDURE WB.documentComplete(pdisp, url)
        thisform.cmd1.Enabled = SYS(3095,pdisp)==SYS(3095,this)
    ENDPROC   
    PROCEDURE cmd1.click
        thisform.wb.setfocus
        thisform.wb.document.getElementById("fpdm").value="ABC051002000511"
        this.setfocus
    ENDPROC
ENDDEFINE



[此贴子已经被作者于2022-2-22 15:56编辑过]

#10
sych2022-02-22 15:59
可以的,这个方法可以
#11
吹水佬2022-02-23 16:07
看了一下页面 fpdm.blur 的源码,可以参考调用 blur 的代码进行处理
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

程序代码:
TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 7
    var isFpdm = function(fpdm){
        var _0x2cbf61 = _0x1136c8;
        if (exec)
            return false;
        var _0x5906a4 = fpdm;
        if ('' === _0x5906a4)
            return false;
        if ((_0x5906a4[_0x2cbf61(0x183)] == 0xa || _0x5906a4['length'] == 0xc) && _0x5906a4[_0x2cbf61(0x19a)](',') === -0x1){
            afcdm(_0x5906a4);
            return true;
        }else{
            $(_0x2cbf61(0x1d7))[_0x2cbf61(0x176)](_0x2cbf61(0x1a7));
            $('#fpdmjy')[_0x2cbf61(0x176)]('font_red');
            $(_0x2cbf61(0x1d7))[_0x2cbf61(0x1df)](_0x2cbf61(0x18b));
            acb(fplx);
            return false;
        }
    };
ENDTEXT
of = CREATEOBJECT("webForm")
of.show
READ EVENTS
RETURN

DEFINE CLASS webForm AS Form
    ShowWindow = 2
    WindowState = 2
    ADD OBJECT txt1 as textbox WITH left=10,top=10,width=130,height=22,value="051002000511"
    ADD OBJECT cmd1 as commandbutton WITH left=150,top=10,height=22,Enabled=0,caption="test"
    ADD OBJECT WB AS Olecontrol WITH left=0,top=42, Width=this.width,Height=this.height-42,Anchor=15,OleClass="Shell.Explorer.2",Visible=.T.
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
    PROCEDURE Init
        this.WB.Silent = 0  &&提示安全证书问题警告
        this.WB.Navigate("https://inv-veri.chinatax.)
    ENDPROC
    PROCEDURE WB.documentComplete(pdisp, url)
        IF SYS(3095,pdisp)==SYS(3095,this)
            thisform.wb.Document.parentWindow.execScript(jsCode)
            thisform.cmd1.Enabled = 1
        ENDIF
    ENDPROC   
    PROCEDURE cmd1.click
        cFpdm = ALLTRIM(thisform.txt1.value)
        bFpdm = thisform.wb.document.Script.isFpdm(cFpdm)
        thisform.caption = "发票代码 "+ cFpdm + IIF(bFpdm," 正确"," 错误")
    ENDPROC
ENDDEFINE
#12
sych2022-02-23 16:46
谢谢,直接扒底裤了
#13
吹水佬2022-02-23 19:14
回复 11楼 吹水佬
改错:
    afcdm(_0x5906a4);
    return true;
改为:
    return (typeof(afcdm(_0x5906a4))=="undefined");

程序代码:
TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 15
    var isFpdm = function(fpdm){
        var _0x2cbf61 = _0x1136c8;
        if (exec)
            return false;
        var _0x5906a4 = fpdm;
        if ('' === _0x5906a4)
            return false;
        if ((_0x5906a4[_0x2cbf61(0x183)] == 0xa || _0x5906a4['length'] == 0xc) && _0x5906a4[_0x2cbf61(0x19a)](',') === -0x1){
            return (typeof(afcdm(_0x5906a4))=="undefined");
        }
        $(_0x2cbf61(0x1d7))[_0x2cbf61(0x176)](_0x2cbf61(0x1a7));
        $('#fpdmjy')[_0x2cbf61(0x176)]('font_red');
        $(_0x2cbf61(0x1d7))[_0x2cbf61(0x1df)](_0x2cbf61(0x18b));
        acb(fplx);
        return false;
    };
ENDTEXT
#14
sych2022-02-23 19:56
好的,下午测试第一次的代码也正常的,我要好好琢磨琢磨两次的差别,消化吸收
#15
sych2022-02-23 19:58
发票号码好像也需要运算生成校验结果,一般输入8位都算正确
#16
sych2022-02-23 20:08
fpdm.blur 的源码?看来只会VFP还是不行啦,_cliptext=of.wb.document.body.innerhtml没有找你说的代码
#17
吹水佬2022-02-23 20:09
以下是引用sych在2022-2-23 19:58:42的发言:

发票号码好像也需要运算生成校验结果,一般输入8位都算正确

对照一下页面
051002000511  “√”
051002000521  “×”
#18
sych2022-02-23 20:10
好像找到了,js/indexfunc.js
#19
sych2022-02-23 20:13
但要自己写函数,估计有点悬
#20
吹水佬2022-02-23 20:28
以下是引用sych在2022-2-23 20:08:10的发言:

fpdm.blur 的源码?看来只会VFP还是不行啦,_cliptext=of.wb.document.body.innerhtml没有找你说的代码

用开发者工具看看
只有本站会员才能查看附件,请 登录

你看到的可能是左分
pfdm.blur() 在右边部分的js文件
其中 https://inv-veri.chinatax. 的 pfdm.blur() 部分
$(_0x1136c8(0x17d))[_0x1136c8(0x1ba)](function() {
    var _0x2cbf61 = _0x1136c8;
    if (!exec) {
        var _0x5906a4 = $(_0x2cbf61(0x17d))[_0x2cbf61(0x1c7)]()[_0x2cbf61(0x1dc)]();
        if ('' === _0x5906a4)
            return;
        (_0x5906a4[_0x2cbf61(0x183)] == 0xa || _0x5906a4['length'] == 0xc) && _0x5906a4[_0x2cbf61(0x19a)](',') === -0x1 ? afcdm(_0x5906a4) : ($(_0x2cbf61(0x1d7))[_0x2cbf61(0x176)](_0x2cbf61(0x1a7)),
        $('#fpdmjy')[_0x2cbf61(0x176)]('font_red'),
        $(_0x2cbf61(0x1d7))[_0x2cbf61(0x1df)](_0x2cbf61(0x18b))),
        acb(fplx);
    }
})

其中:
$(_0x1136c8(0x17d))[_0x1136c8(0x1ba)](function() {
开头这段相当于:
$("#pfdm")["blur"](function(){
#21
sych2022-02-23 20:39
TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 15
    var isFpdm = function(fpdm){
        var _0x2cbf61 = _0x1136c8;
        if (exec)
            return false;
        var _0x5906a4 = fpdm;
        if ('' === _0x5906a4)
            return false;
        if ((_0x5906a4[_0x2cbf61(0x183)] == 0xa || _0x5906a4['length'] == 0xc) && _0x5906a4[_0x2cbf61(0x19a)](',') === -0x1){
            return (typeof(afcdm(_0x5906a4))=="undefined");
        }
        $(_0x2cbf61(0x1d7))[_0x2cbf61(0x176)](_0x2cbf61(0x1a7));
        $('#fpdmjy')[_0x2cbf61(0x176)]('font_red');
        $(_0x2cbf61(0x1d7))[_0x2cbf61(0x1df)](_0x2cbf61(0x18b));
        acb(fplx);
        return false;
    };
ENDTEXT
这一段代码能不能简化一下,不要判断语句,只要最后的执行语句afcdm(_0x5906a4),因为输入的代码、号码一定是正确的
#22
sych2022-02-23 20:42
我改成这样了,
TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 15
    var isFpdm = function(fpdm){
        var _0x5906a4 = fpdm;
        afcdm(_0x5906a4);
        return true;
    }
ENDTEXT
运行成功
#23
sych2022-02-23 20:45
挺好玩的,我又改了一下
TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 15
    var isFpdm = function(fpdm){
        afcdm(fpdm);
        return true
    }
ENDTEXT
也可以
#24
吹水佬2022-02-23 20:54
以下是引用sych在2022-2-23 20:45:46的发言:

挺好玩的,我又改了一下
TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 15
    var isFpdm = function(fpdm){
        afcdm(fpdm);
        return true
    }
ENDTEXT
也可以

返回都是true,不用检测了。
试试:
051002000511 对的
051002000521 错的

afcdm()返回 undefined 或 false
返回检测结果:return (typeof(afcdm(fpdm))=="undefined");

#25
sych2022-02-23 20:57
好的
发票号码太麻烦了,看不懂了,找不到最后执行的是哪个函数,麻烦帮我看看吧
#26
吹水佬2022-02-23 21:00
以下是引用sych在2022-2-23 20:57:14的发言:

好的
发票号码太麻烦了,看不懂了,找不到最后执行的是哪个函数,麻烦帮我看看吧

至少给一个发票号来测试吧
#27
sych2022-02-23 21:03
12345678就可以,8位数字
#28
sych2022-02-23 21:13
好像可以直接用)['keyup'](function()这个函数,因为在发票号码、和发票代码输入后都会调用这个函数
#29
sych2022-02-23 21:28
我又憨胆大,改成直接调用了
        bFpdm = thisform.wb.document.Script.afcdm(of.wb.Document.getElementByid("fpdm").value)
        bFpdm = thisform.wb.document.Script.ahmch(of.wb.Document.getElementByid("fphm").value)
达到效果了
完整代码
of = CREATEOBJECT("webForm")
of.show
READ EVENTS
RETURN

DEFINE CLASS webForm AS Form
    ShowWindow = 2
    WindowState = 2
    ADD OBJECT txt1 as textbox WITH left=10,top=10,width=130,height=22,value="051002000511"
    ADD OBJECT cmd1 as commandbutton WITH left=150,top=10,height=22,Enabled=0,caption="test"
    ADD OBJECT WB AS Olecontrol WITH left=0,top=42, Width=this.width,Height=this.height-42,Anchor=15,OleClass="Shell.Explorer.2",Visible=.T.
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
    PROCEDURE Init
        this.WB.Silent = 0  &&提示安全证书问题警告
        this.WB.Navigate("https://inv-veri.chinatax.)
    ENDPROC
    PROCEDURE WB.documentComplete(pdisp, url)
        IF SYS(3095,pdisp)==SYS(3095,this)
            thisform.wb.Document.parentWindow.execScript(jsCode)
            thisform.cmd1.Enabled = 1
        ENDIF
    ENDPROC   
    PROCEDURE cmd1.click
        of.wb.Document.getElementByid("fpdm").value="051002000511"
        of.wb.Document.getElementByid("fphm").value="12345678"
        bFpdm = thisform.wb.document.Script.afcdm(of.wb.Document.getElementByid("fpdm").value)
        bFpdm = thisform.wb.document.Script.ahmch(of.wb.Document.getElementByid("fphm").value)
    ENDPROC
ENDDEFINE
#30
sych2022-02-23 21:31
谢谢,又学到了很多知识
#31
sych2022-02-23 21:34
$('#kprqjy')这些不知道啥意思?咋调用
#32
吹水佬2022-02-23 21:56
直接由afcdm、ahmch返回结果有可能不对,尤其是afcdm,ahmch好象能保证长度8个字符就可以

参考源码改写
程序代码:
TEXT TO fpdmCode TEXTMERGE NOSHOW PRETEXT 15
    var isFpdm = function(fpdm){
        var _0x2cbf61 = _0x1136c8;
        if (exec)
            return false;
        var _0x5906a4 = fpdm;
        if ('' === _0x5906a4)
            return false;
        if ((_0x5906a4[_0x2cbf61(0x183)] == 0xa || _0x5906a4['length'] == 0xc) && _0x5906a4[_0x2cbf61(0x19a)](',') === -0x1){
            return (typeof(afcdm(_0x5906a4))=="undefined");
        }
        $(_0x2cbf61(0x1d7))[_0x2cbf61(0x176)](_0x2cbf61(0x1a7));
        $('#fpdmjy')[_0x2cbf61(0x176)]('font_red');
        $(_0x2cbf61(0x1d7))[_0x2cbf61(0x1df)](_0x2cbf61(0x18b));
        acb(fplx);
        return false;
    };
ENDTEXT
TEXT TO fphmCode TEXTMERGE NOSHOW PRETEXT 15
    var isFphm = function(fphm){
        var _0x132aa0 = _0x1136c8;
        _0x2fe9eb = fphm;
        if (_0x2fe9eb[_0x132aa0(0x183)] != 0x0 && _0x2fe9eb['length'] == 0x8){
            ahmch(_0x2fe9eb);
            return true;
        }
        $('#fphmjy')['removeClass']();
        $(_0x132aa0(0x186))[_0x132aa0(0x176)](_0x132aa0(0x1c6));
        $(_0x132aa0(0x186))['html']('请输入发票号码');
        afcdm(fpdm);
        setFplxByFphm(_0x2fe9eb);
        acb(fplx);
        return false;
    };
ENDTEXT
of = CREATEOBJECT("webForm")
of.show
READ EVENTS
RETURN

DEFINE CLASS webForm AS Form
    ShowWindow = 2
    WindowState = 2
    ADD OBJECT txt1 as textbox WITH left=10,top=10,width=130,height=22,value="051002000511"
    ADD OBJECT txt2 as textbox WITH left=150,top=10,width=130,height=22,value="12345678"
    ADD OBJECT cmd1 as commandbutton WITH left=290,top=10,height=22,Enabled=0,caption="test"
    ADD OBJECT WB AS Olecontrol WITH left=0,top=42, Width=this.width,Height=this.height-42,Anchor=15,OleClass="Shell.Explorer.2",Visible=.T.
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
    PROCEDURE Init
        this.WB.Silent = 0  &&提示安全证书问题警告
        this.WB.Navigate("https://inv-veri.chinatax.)
    ENDPROC
    PROCEDURE WB.documentComplete(pdisp, url)
        IF SYS(3095,pdisp)==SYS(3095,this)
            thisform.wb.Document.parentWindow.execScript(fpdmCode)
            thisform.wb.Document.parentWindow.execScript(fphmCode)
            thisform.cmd1.Enabled = 1
        ENDIF
    ENDPROC   
    PROCEDURE cmd1.click
        cFpdm = ALLTRIM(thisform.txt1.value)
        bFpdm = thisform.wb.document.Script.isFpdm(cFpdm)
        thisform.caption = "发票代码 "+ cFpdm + IIF(bFpdm," 正确"," 错误")
        cFphm = ALLTRIM(thisform.txt2.value)
        bFphm = thisform.wb.document.Script.isFphm(cFphm)
        thisform.caption = thisform.caption+"    发票号码 "+ cFphm + IIF(bFphm," 正确"," 错误")
    ENDPROC
ENDDEFINE
#33
吹水佬2022-02-23 21:58
以下是引用sych在2022-2-23 21:34:52的发言:

$('#kprqjy')这些不知道啥意思?咋调用

相当于
Document.getElementByid("kprqjy")
#34
sych2022-02-23 21:58
好的,谢谢,今天学习了不少新知识,抽空还要补充一下相关知识点
1