问题描述:在html页面绑定onclick="cli()" 方法,定义在$(function( function cli(){} ))不起作用

  1. $(function(){
  1. function createTableData(param){
    $.ajax({
    url: "/api/ezs/dataAcquisition/list",
    data:{"param":JSON.stringify(param)},
    type: 'post',
    dataType: 'json',
    success: function (data) {
    // console.log(data);
    $("#collection_content").empty();
    for(var i=0;i<data.data.length;i++){
    var collection_table='<div class="ezsm-collection-table">' +
    '<table cellspacing="0">' +
    '<tr><td>名称/规格:</td><td id="openDetail" onclick="openDetail('+data.data[i].id+');">'+data.data[i].specification+'</td></tr>' +
    '<tr><td>地区:</td><td>'+data.data[i].areaName+'</td></tr>' +
    '<tr><td>来源:</td><td>'+data.data[i].source+'</td></tr>' +
    '<tr><td>昨日价格:</td><td>'+data.data[i].price+'</td></tr>' +
    '<tr>' +
    '<td>当日价格:</td>' +
    '<td>' +
    '<div class="ezsm-collection-table-btn" onclick="unchangedBtn('+data.data[i].id+')">不变</div>' +
    '<div class="ezsm-collection-table-btn" onclick="Ezsm_Alert_UpPrice('+data.data[i].id+');">更新</div>' +
    '</td>' +
    '</tr>' +
    '</table></div>';
    $("#collection_content").append(collection_table);
    }
    },
    error: function (status) {}
    });
    }
    //此时定义的opendetail不起作用
  1. function openDetail(trendId){
    localStorage.removeItem('trendId');
    localStorage.setItem('trendId',trendId);
    window.location.href="detail.html";
  1. }
    })
  2.  
  3. 解决办法
    $(function(){})换成闭包
  1. (function(window){
  1. //打开详情
    window.openDetail=function(trendId){
  2.  
  3. localStorage.removeItem('trendId');
    localStorage.setItem('trendId',trendId);
    window.location.href="detail.html";
    };
    })(window);
  4.  
  5. 原因:$(function(){})只在自己的作用域起作用,onclick绑定的方法只在初始化页面时加载之后就清空其作用域,除非将该方法放在$(function(){})外面,但这样会出现代码冗余.
    此时将该方法放在window下面,这样调用的时候就可以了
  6.  
  7. 记录: 不建议将onclick绑在页面上,最优的是使用h5 data-*自定义属性(具体使用看js data-*自定义属性)
  8.  
  1.  

闭包引起的onclick不起作用的更多相关文章

  1. 浅析匿名函数、lambda表达式、闭包(closure)区别与作用

    浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...

  2. js的闭包中关于执行环境和作用链的理解

    首先讲一讲执行环境: 执行环境按照字面上来理解就是指目前代码执行所在的环境. 当JavaScript代码执行的时候,会进入不同的执行上下文,这些执行上下文会构成了一个执行上下文栈(Execution ...

  3. javascript闭包和立即执行函数的作用

    一.闭包——closure 先看一个闭包的例子.我们想实现一个计数器,最简单的方法就是定义一个全局变量,计数的时候将其加1.但是全局变量有风险,哪里都有可能不小心改掉它.那局部变量呢, 它只在函数内部 ...

  4. 什么是闭包?在js中的作用是什么?

    闭包就是讲函数内部生成的变量保存到内存中,进行下次调用:也可以说函数外不可以调用函数内部的变量: 当函数内部返回一个函数时,闭包搭建了方法内部与方法外部的桥梁,使得外部也可以任意的获取到方法内部的资源 ...

  5. javascript闭包作用

    闭包的简单概念:闭包就是能够读取其他函数内部变量的函数. 函数内部的函数闭包的两个最大的作用读取函数内部的变量变量的值始终保持在内存中function A(){ var n=999; nAdd=fun ...

  6. 深入解析Javascript闭包

    首先给个例子: function PfnOuter(){ var num=999; function PfnInner(){ alert(num); } return PfnInner; } var ...

  7. JavaScript:闭包

    根据MDN上的解释『闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境.』 闭包有两个主要的作用: 1.访问内部函数的局域变量: 2.将创建的变量永久保存在内存中, ...

  8. Python深入04 闭包

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 闭包(closure)是函数式编程的重要的语法结构.函数式编程是一种编程范式 (而 ...

  9. python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)

    1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...

随机推荐

  1. c++类成员变量初始化相关问题

    对于内置变量的自动初始化 代码1 1 #include<stdio.h> 2 #define CONST 100 3 int *p1; 4 int a[2]; 5 int b; 6 sta ...

  2. cycript使用

    cycript的原理是动态库注入,但是其动态库注入的原理,与我们常见的通过LC_LOAD_DYLIB在可执行文件中注入动态库不同. cycript的操作是 : 抓取到要挂载的应用, 由于越狱机上拥有权 ...

  3. 不用ajax实现异步请求:XmlHttpRequest 小记

    视图页面代码 控制器代码

  4. java详解内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...

  5. c#之如何转换文本文件编码格式为utf-8

    如代码: string content = File.ReadAllText(path, Encoding.Default); File.WriteAllText(path, content, Enc ...

  6. 水题 J

    一张CT扫描的灰度图像可以用一个N*N(0 < N <= 100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-255.我们假设给定的图像中有且只有一个肿瘤.在图上监测 ...

  7. QString和char*互转

    1. QString转为char * // QString转QByteArray QByteArray sr = strQ.toLocal8Bit(); int len = sr.length(); ...

  8. vs远程调试 转http://www.cnblogs.com/magicchaiy/archive/2013/05/28/3088274.html

    远程调试应用场景 部署环境:ASP.NET(C#)+IIS+Win7 64 bit 很多公司的开发模式都是将开发机器和服务器分开,也就是开发一台机,服务器一台机.而测试人员会在服务器上录入测试数据,此 ...

  9. Codeforces Round #323

    div1 C 这题的是给了一个无限循环的子数组,问有多少个 (l,s)l代表起点s代表长度的循环串,使得所有的在原串中的每位都小于等于另外这个串(l<=n,1<=s<n) 像这样,我 ...

  10. GCD(III)

    GCD 线程间的通信 在iOS开发过程中,我们一般在主线程里边进行UI刷新,例如:点击.滚动.拖拽等事件.我们通常把一些耗时的操作放在其他线程,比如说图片下载.文件上传等耗时操作.而当我们有时候在其他 ...