您的位置:首页 > Web前端 > JQuery

jquery异步调用自数据库获取值通过knockoutjs赋值给职位二级菜单导致的jquery的hover事件不执行的例子

2016-12-23 20:38 701 查看
页面中的相应代码:

<div class="goods">
<div class="head">
<h3>
<i class="fa fa-bars pull-left margin-left-20"></i>
<i class="fa fa-chevron-down pull-right margin-right-20"><span></span></i>全部职位分类
</h3>
</div>
<div class="all-goods">
<!-- ko foreach: $data.JobClass -->
<div class="item " data-bind="css:{'btnone':$index==0}">
<div class=" product">
<i class="fa fa-chevron-right pull-right margin-top-10 margin-right-20 font-xs" style="color:#c1c1c1"></i>
<h3> <a href="#" data-bind="text:$data.JobClassName">...</a> </h3>
</div>
<div class="product-wrap posone">
<!-- ko foreach: SubClass -->
<div class="cf">
<div class="fl pr20">
<h2><a href="#" target="_blank" data-bind="text:$data.JobClassName">...</a></h2>
<dl class="cf">
<!-- ko foreach: Jobs -->
<dd> <a href="" target="_blank" data-bind="text:$data.JobClassName,attr:{'href':'/so/1/'+JobClassCode()}" style="font-weight:normal;">...</a> </dd>
<!-- /ko -->
</dl>
</div>
</div>
<!-- /ko -->
</div>
</div>
<!-- /ko -->
</div>
</div>
jquery调用:
$.post("/service/getjobclass", {}, function (data) {
       jobClassX = data;
       console.info(jobClassX);
       page.VM.JobClass=ko.mapping.fromJS(jobClassX, {}, page.VM.JobClass);
   });
​导致的显示效果本来是这样:



鼠标放在左边链接上能显示右边的菜单,但是,现在却显示不出了。查了下控制hover显示的代码:
//商品分类   ​$('.all-goods .item').hover(function () {       console.info($(this).addClass('active').find('s'));
       $(this).addClass('active').find('s').hide();
       $(this).find('.product-wrap').show();
   }, function () {
       console.info($(this).removeClass('active').find('s'));
       $(this).removeClass('active').find('s').show();
       $(this).find('.product-wrap').hide();
   });
增加console.info输出,在浏览器控制台没有任何提示,说明hover事件根本没有执行。刚开始以为是异步调用二级和三级职位分类没加载上,审查元素,看到自数据库中获取的数据在页面中均正确加载了。经过各种尝试均没有解决。后来怀疑是异步调用的问题。改为同步调用。代码如下:
$.ajax({
        url: "/service/getjobclass",
        type:"POST",
        data:{}, 
        async:false,
        success: function (data) {
            jobClassX = data;
            console.info(jobClassX);
            page.VM.JobClass = ko.mapping.fromJS(jobClassX, {}, page.VM.JobClass);
        }
    });这才可以正确显示.推测是hover事件绑定函数的时候,异步调用还没有加载完全造成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  knockoutjs jquery