奈何两字拉成桥、不得不双击两次才能激活的JS方法

Aug 18, 2017, 艳阳高照

REQUEST

vv在做一个自带Google地图功能的Microsite,经纬度都研究明明白白的了,却被一个小问题困扰着,每次刷新页面之后点击链接都必须点击两次才能激活功能,而之后只需要点一次就可以,这个小哥用最近新学的AngularJs写的功能,抓耳挠腮不知道是AngularJs哪里出了问题

SOLUTION

在Google里边搜了一下“javascript have to click twice”,竟然有好多人遇到相同的问题,打开了几个stackoverflow,看了其中两个,发现说的都是同一个情况,《I have to click twice to activate function using jQuery》(https://stackoverflow.com/questions/28746323/i-have-to-click-twice-to-activate-function-using-jquery)在htm里边用onclick引用了JS里写的方法,问题就出现在JS里对应的function中重复绑定了click功能。看到这个答案,反观自己的HTML和JS代码

<h4>Where you‘ll find us</h4>
<div class="clearfix"> <span class="search-store-icon">Region:</span>
  <input type="text" placeholder="" name="" class="search-store" ng-model="searchStores" ng-change="timeflash()">
  <ul class="storelist" ng-show="searchStores.length > 0" ng-focus="hasFocus=true">
    <li ng-repeat="x in stores | filter:searchStores | orderBy:‘region‘" ng-mouseover="mouseOverEvent($index)" ng-click="enterKeyEvent($event)" data-storeidx="{{ x.storeidx }}" data-omni-type="microsite" data-omni="{{ x.omn }}">{{ x.name }}</li>
  </ul>
</div>

Html Code

$scope.enterKeyEvent = function (event) {
    var listArry = $(‘.storelist>li‘);
    listArry.click(function() {
        var selectListName = $(event.target).text();
        var selectListIdx = $(event.target).attr(‘data-storeidx‘);
        var lat1 = $scope.stores[selectListIdx].lat;
        var lng1 = $scope.stores[selectListIdx].lng;
        var selectStoreMap = $scope.stores[selectListIdx].map;
        $(‘.storelist‘).hide();
        $(‘.search-store‘).val(selectListName);
        storeName.text($scope.stores[selectListIdx].name);
        storeGegion.text($scope.stores[selectListIdx].region);
        storeLocation.text($scope.stores[selectListIdx].location);
        storeAddr.text($scope.stores[selectListIdx].address);
        storePhone.text($scope.stores[selectListIdx].tel);
        if(selectStoreMap == null || selectStoreMap == undefined || selectStoreMap == ‘‘){
            $(‘#store-map‘).hide();
        }else{
            $(‘#store-map‘).show();
            storeMap.attr("src",selectStoreMap);
        }
        getNearbyStore(lat1,lng1);
    });
};

JavaScript Incorrect Code

在Html中“ng-click="enterKeyEvent($event)"”的ng-click就相当于onclick,在JS中定位了listArry,并对listArry绑定了cilck方法,和stackoverflow中提到的问题是同一类,于是删掉不必要的listArry定位和click方法,重新修改JS如下:

$scope.enterKeyEvent = function (event) {

    var selectListName = $(event.target).text();
    var selectListIdx = $(event.target).attr(‘data-storeidx‘);
    var lat1 = $scope.stores[selectListIdx].lat;
    var lng1 = $scope.stores[selectListIdx].lng;
    var selectStoreMap = $scope.stores[selectListIdx].map;
    $(‘.storelist‘).hide();
    $(‘.search-store‘).val(selectListName);
    storeName.text($scope.stores[selectListIdx].name);
    storeGegion.text($scope.stores[selectListIdx].region);
    storeLocation.text($scope.stores[selectListIdx].location);
    storeAddr.text($scope.stores[selectListIdx].address);
    storePhone.text($scope.stores[selectListIdx].tel);
    if(selectStoreMap == null || selectStoreMap == undefined || selectStoreMap == ‘‘){
        $(‘#store-map‘).hide();
    }else{
        $(‘#store-map‘).show();
        storeMap.attr("src",selectStoreMap);
    }
    getNearbyStore(lat1,lng1);

};

JavaScript Correct Code

困扰vv昨晚一晚的问题,我们半个小时就解决了,哈,因为今天中午他请客吃烤鱼了!

时间: 2024-11-07 16:28:45

奈何两字拉成桥、不得不双击两次才能激活的JS方法的相关文章

datagridview里面有combox避免双击两次的写法

双击两次变成单击一次的写法: void dataGridView_CellEnter(object sender, DataGridViewCellEventArgs e) { //实现单击一次显示下拉列表框 if (dataGridView.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1) { SendKeys.Send("{F4}"); } } 微软设计的F4是吧下拉框

String转换成float并且保留两位小数,购物车计算价格

方法1: 用DecimalFormat 返回的是String格式的.该类对十进制进行全面的封装.像%号,千分位,小数精度.科学计算. float perPrice=Float.parseFloat(textView_price_shopCar.getText().toString()) * count;//String类型转换成float类型 DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足

将引用了第三方jar包的Java项目打包成jar文件的两种方法

方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下: Manifest-Version: 1.0 Class-Path: lib/commons-codec.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.jar lib/log4j-1.

把 Python 脚本打包成可以直接双击运行的 .exe 文件

把 Python 脚本打包成可以直接双击运行的 .exe 文件安装 pip3 install pyinstaller pip install pypiwin32执行 pyinstaller -F -i qq.ico -w test.py -F 指定打包后只生成一个exe格式的文件-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)-c –console, –nowindowed 使用控制台,***面(默认)-w –windowed, –noconsole 使用窗口,无

Shell合并两个文件成一个文件的两列

Shell合并两个文件成一个文件的两列 发布时间:2014-07-20   编辑:www.jquerycn.cn Shell合并两个文件成一个文件的两列,提供了两种方法,普通shell脚本,awk脚本. 文件内容如下:more eng.txt chi.txt ::::::::::::::eng.txt::::::::::::::semicoloncommadelimiterspacebarhyphensingle quotedouble quote ::::::::::::::chi.txt::

将数组分为两部分,使得这两部分和最接近,返回这两部分的差值

[问题]将数组分为两部分,使得两部分的和最接近,返回两部分的差值.例如: int[] array={1,0,1,7,2,4},分为两部分为{1,0,1,2,4},{7},差值为1. 参考1:<编程之美>第2.18节,不过问题有所不同,2.18节要求长度为2n的数组分为两个长度为n的数组,使得两部分和最接近. 参考2:http://www.tuicool.com/articles/ZF73Af [思路]动态规划的解法.求得array的和sum,问题转化为:在array中选取若干个元素,使得这些元

两个栈实现一个队列和两个队列实现一个栈【算法导论课后题】

关于两个栈实现一个队列和两个队列实现一个栈问题,网上有很多资料.这里只描述自己认为操作最少的方法. 两个栈实现一个队列 思想:假设两个栈分别为s1,s2.对s1进行入队,出队时,先判断s2是否为空,如果是则将s1中元素压入s2并弹出最上面元素,如果不是,则直接弹出s2最上面的元素. <span style="font-size:18px;">EnQueue(s1,s2,k){ push(s1,k)</span><span style="font-

比较两个数的大小,自定义比较两个整数的大小的方法

比较两个数的大小,自定义比较两个整数的大小的方法: 如果第一个数大,返回1 如果相等返回0 如果第一个数小,返回-1 在Main()方法中输入两个数,调用这个方法 示例: 请输入两个数: 45 56 第二个数大 按任意键继续...... 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 n

1-100的连续整数,乱序,丢失两个数,原地找出这两个数

问题描述: 1.比如inp={2,3,6,4,7}丢失了1,5,原地找出这两个数. 2.为了方便讨论这个连续数组从1开始到7截至,数组扩展到7位inp={2,3,6,4,7,0,0}: 解决: 1.利用数组元素值与数组下标关系,遍历整个数组,没有被遍历到的位置则为丢失元素所在位置,具体流程如下: 1.从头开始读数组inp[0]=2,根据值2跳转到数组下标为inp[2-1]的位置,得到inp[2-1]=3: 2.修改状态:这个过程中inp[0]位置跳出过,但未跳入过,用0表示这种状态.修改inp[