wujianfeng
wujianfeng
  • 发布:2016-02-02 17:13
  • 更新:2016-02-02 18:01
  • 阅读:1430

预加载的页面不能添加事件监听嘛?

分类:MUI

mui.init();  
        window.addEventListener('getDetail', function(event) {  
            //获得事件参数  
            var id = event.detail.id;  
            mui.ajax("http://dlzs.shjjyq.net/Service/MobileService/PersonnelInfoService.asmx/GetPersonnelInfo", {  
                data: {  
                    pId: id  
                },  
                dataType: "json",  
                type: "post",  
                timeout: 60000,  
                contentType: "application/x-www-form-urlencoded",  
                success: function(data) {  
                    var table = document.querySelector('.mui-table-view');  
                    while (table.hasChildNodes()) {  
                        if (table.childNodes.length == 1) {  
                            break;  
                        } else {  
                            table.removeChild(table.firstChild);  
                        }  
                    }  
                    var Name = document.createElement('li');  
                    Name.className = 'mui-table-view-cell';  
                    Name.innerHTML = '<a>姓名:<span class="mui-pull-right">' + (data.Name === null ? '' : data.Name) + '</span></a>';  
                    table.insertBefore(Name, table.lastChild);  
                    var CorpRole = document.createElement('li');  
                    CorpRole.className = 'mui-table-view-cell';  
                    CorpRole.innerHTML = '<a>企业角色:<span class="mui-pull-right">' + (data.CorpRole === null ? '' : data.CorpRole) + '</span></a>';  
                    table.insertBefore(CorpRole, table.lastChild);  
                    var PIDType = document.createElement('li');  
                    PIDType.className = 'mui-table-view-cell';  
                    PIDType.innerHTML = '<a>证件类型:<span class="mui-pull-right">' + (data.PIDType === null ? '' : data.PIDType) + '</span></a>';  
                    table.insertBefore(PIDType, table.lastChild);  
                    var PID = document.createElement('li');  
                    PID.className = 'mui-table-view-cell';  
                    PID.innerHTML = '<a>证件号码:<span class="mui-pull-right">' + (data.PID === null ? '' : data.PID) + '</span></a>';  
                    table.insertBefore(PID, table.lastChild);  
                    var Sex = document.createElement('li');  
                    Sex.className = 'mui-table-view-cell';  
                    Sex.innerHTML = '<a>性别:<span class="mui-pull-right">' + (data.Sex === null ? '' : data.Sex) + '</span></a>';  
                    table.insertBefore(Sex, table.lastChild);  
                    var Birthday = document.createElement('li');  
                    Birthday.className = 'mui-table-view-cell';  
                    Birthday.innerHTML = '<a>出生日期:<span class="mui-pull-right">' + (data.Birthday === null ? '' : data.Birthday.substr(0, 10)) + '</span></a>';  
                    table.insertBefore(Birthday, table.lastChild);  
                    var MobilePhone = document.createElement('li');  
                    MobilePhone.className = 'mui-table-view-cell';  
                    MobilePhone.innerHTML = '<div class="mui-slider-handle">' +  
                        '手机号码:' +  
                        '<span id="MobilePhoneValue" class="mui-pull-right">' +  
                        (data.MobilePhone === null ? '' : data.MobilePhone) +  
                        '</span>' +  
                        '</div>' +  
                        '<div class="mui-slider-right mui-disabled">' +  
                        '<a id="MobilePhone" class="mui-btn mui-btn-yellow mui-icon mui-icon-phone"></a>' +  
                        '</div>';  
                    table.insertBefore(MobilePhone, table.lastChild);  
                    var Telphone = document.createElement('li');  
                    Telphone.className = 'mui-table-view-cell';  
                    Telphone.innerHTML = '<div class="mui-slider-handle">' +  
                        '固定电话:' +  
                        '<span id="TelphoneValue" class="mui-pull-right">' +  
                        (data.Telphone === null ? '' : data.Telphone) +  
                        '</span>' +  
                        '</div>' +  
                        '<div class="mui-slider-right mui-disabled">' +  
                        '<a id="Telphone" class="mui-btn mui-btn-yellow mui-icon mui-icon-phone"></a>' +  
                        '</div>';  
                    table.insertBefore(Telphone, table.lastChild);  
                    var QQ = document.createElement('li');  
                    QQ.className = 'mui-table-view-cell';  
                    QQ.innerHTML = '<a>QQ:<span class="mui-pull-right">' + (data.QQ === null ? '' : data.QQ) + '</span></a>';  
                    table.insertBefore(QQ, table.lastChild);  
                    var Weixin = document.createElement('li');  
                    Weixin.className = 'mui-table-view-cell';  
                    Weixin.innerHTML = '<a>微信:<span class="mui-pull-right">' + (data.Weixin === null ? '' : data.Weixin) + '</span></a>';  
                    table.insertBefore(Weixin, table.lastChild);  
                    var Email = document.createElement('li');  
                    Email.className = 'mui-table-view-cell';  
                    Email.innerHTML = '<a>邮箱:<span class="mui-pull-right">' + (data.Email === null ? '' : data.Email) + '</span></a>';  
                    table.insertBefore(Email, table.lastChild);  
                    var PIDAdr = document.createElement('li');  
                    PIDAdr.className = 'mui-table-view-cell';  
                    PIDAdr.innerHTML = '<a>证件地址:<span class="mui-pull-right">' + (data.PIDAdr === null ? '' : data.PIDAdr) + '</span></a>';  
                    table.insertBefore(PIDAdr, table.lastChild);  
                    var Residence = document.createElement('li');  
                    Residence.className = 'mui-table-view-cell';  
                    Residence.innerHTML = '<a>现居住地:<span class="mui-pull-right">' + (data.Residence === null ? '' : data.Residence) + '</span></a>';  
                    table.insertBefore(Residence, table.lastChild);  
                }  
            });  
        });  
        mui('.mui-scroll-wrapper').scroll({  
            deceleration: 0.003  
        });  
        mui.plusReady(function() {  

            document.getElementById("MobilePhone").addEventListener('tap', function() {  
                var num = document.getElementById("MobilePhoneValue").innerHTML;  
                plus.device.dial(num, true);  
            });  
            document.getElementById("Telphone").addEventListener('tap', function() {  
                var num = document.getElementById("TelphoneValue").innerHTML;  
                plus.device.dial(num, true);  
            });  
        });
2016-02-02 17:13 负责人:无 分享
已邀请:
DCloud_heavensoft

DCloud_heavensoft

预载的页面可以加事件监听。
延时一下是不是就不报错了?
感觉不应该出现你的问题,检查下是不是有其他代码干扰。

  • wujianfeng (作者)

    不好意思,请问加延时在主页面加还是子页面加?如何加?新手。。。

    另外我不清楚 会有什么其他代码干扰,弹是我的页面是有一个自定义时间的

    window.addEventListener('getDetail', function(event) {

    2016-02-02 17:30

  • DCloud_heavensoft

    回复 wujianfeng:我的推测是你的按钮在plus ready的时候并没有构建好dom。所以让你加个延时试试,settimeout是加延时。

    2016-02-02 17:37

  • wujianfeng (作者)

    回复 DCloud_heavensoft:我真不知道如何处理,麻烦帮忙看下我代码哪块需要改进?

    2016-02-02 17:47

  • wujianfeng (作者)

    回复 DCloud_heavensoft:代码我已经上传上去了

    2016-02-02 17:47

  • DCloud_heavensoft

    你的dom创建的太慢,plus ready事件发生时,document.getElementById("MobilePhone")并不存在于dom。你可以在这个dom元素真正被创建后再调用tap。

    2016-02-02 17:54

  • wujianfeng (作者)

    回复 DCloud_heavensoft:可问题是我需要调用5+原生的功能,就是拨打电话,代码中你可以看到。官方不是说要调用5+原生的功能必须要在plus ready事件中嘛?这样的话 不是两者有冲突嘛?不知道我的理解对不对?

    2016-02-03 08:45

  • DCloud_heavensoft

    回复 wujianfeng: 只要在plus ready之后就可以用plus,之前是不能用的,因为初始化没完成

    2016-02-04 01:33

  • wujianfeng (作者)

    回复 DCloud_heavensoft:已经可以了,谢谢

    2016-02-04 08:41

maq

maq

添加事件监听跟是不是预加载没有关系。这个报错信息明显是 document.getElementById() 没有找到预期的 DOM 对象。

  • wujianfeng (作者)

    可问题出在哪呢?我实在不明白

    2016-02-02 17:38

  • maq

    还不明白?……


    你页面里有 id="MobilePhone" 和 id="Telphone" 的 DOM 对象吗?

    2016-02-02 17:42

maq

maq

看到你主贴中给出了源代码,问题已经很清楚了。MobilePhone 是 ajax 之后动态添加的 DOM 对象,plusReady 的时候它还不存在,所以就报错了。

这种情况一般是用 mui(...).on() 这种代理事件监听的方式,或者在动态创建 MobilePhone 的时候给它 addEventListener()。

  • wujianfeng (作者)

    可问题是我需要调用5+原生的功能,就是拨打电话,代码中你可以看到。官方不是说要调用5+原生的功能必须要在plus ready事件中嘛?这样的话 不是两者有冲突嘛?不知道我的理解对不对?

    2016-02-03 09:14

  • maq

    官方的说法是对的,但是没有冲突。我的前一个评论的后半段就是说这种情况应该怎么做。

    2016-02-03 09:28

  • wujianfeng (作者)

    回复 maq:不好意思,我确实不能明白,能否详细指出如何修改?感谢!!

    2016-02-03 13:08

  • wujianfeng (作者)

    回复 maq:感谢你,我尝试了下 已经解决了!

    2016-02-03 13:14

该问题目前已经被锁定, 无法添加新回复