闭包引起的onclick不起作用
问题描述:在html页面绑定onclick="cli()" 方法,定义在$(function( function cli(){} ))不起作用
$(function(){
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不起作用
function openDetail(trendId){
localStorage.removeItem('trendId');
localStorage.setItem('trendId',trendId);
window.location.href="detail.html";
}
}) 解决办法
将$(function(){})换成闭包
(function(window){
//打开详情
window.openDetail=function(trendId){ localStorage.removeItem('trendId');
localStorage.setItem('trendId',trendId);
window.location.href="detail.html";
};
})(window); 原因:$(function(){})只在自己的作用域起作用,onclick绑定的方法只在初始化页面时加载之后就清空其作用域,除非将该方法放在$(function(){})外面,但这样会出现代码冗余.
此时将该方法放在window下面,这样调用的时候就可以了 记录: 不建议将onclick绑在页面上,最优的是使用h5 data-*自定义属性(具体使用看js之 data-*自定义属性)
闭包引起的onclick不起作用的更多相关文章
- 浅析匿名函数、lambda表达式、闭包(closure)区别与作用
浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...
- js的闭包中关于执行环境和作用链的理解
首先讲一讲执行环境: 执行环境按照字面上来理解就是指目前代码执行所在的环境. 当JavaScript代码执行的时候,会进入不同的执行上下文,这些执行上下文会构成了一个执行上下文栈(Execution ...
- javascript闭包和立即执行函数的作用
一.闭包——closure 先看一个闭包的例子.我们想实现一个计数器,最简单的方法就是定义一个全局变量,计数的时候将其加1.但是全局变量有风险,哪里都有可能不小心改掉它.那局部变量呢, 它只在函数内部 ...
- 什么是闭包?在js中的作用是什么?
闭包就是讲函数内部生成的变量保存到内存中,进行下次调用:也可以说函数外不可以调用函数内部的变量: 当函数内部返回一个函数时,闭包搭建了方法内部与方法外部的桥梁,使得外部也可以任意的获取到方法内部的资源 ...
- javascript闭包作用
闭包的简单概念:闭包就是能够读取其他函数内部变量的函数. 函数内部的函数闭包的两个最大的作用读取函数内部的变量变量的值始终保持在内存中function A(){ var n=999; nAdd=fun ...
- 深入解析Javascript闭包
首先给个例子: function PfnOuter(){ var num=999; function PfnInner(){ alert(num); } return PfnInner; } var ...
- JavaScript:闭包
根据MDN上的解释『闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境.』 闭包有两个主要的作用: 1.访问内部函数的局域变量: 2.将创建的变量永久保存在内存中, ...
- Python深入04 闭包
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 闭包(closure)是函数式编程的重要的语法结构.函数式编程是一种编程范式 (而 ...
- python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)
1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...
随机推荐
- MySQL--10MySQL图形化管理工具
- SQL数据库存储过程
添加修改 create PROCEDURE sp_insert_1(pid int,pname varchar(200),page varchar(200),pscore int,out code i ...
- python os.path模块常用方法详解
os.path模块主要用于文件的属性获取,在编程中经常用到,以下是该模块的几种常用方法.更多的方法可以去查看官方文档:http://docs.python.org/library/os.path.ht ...
- django基础(一)
一.创建django程序 1.终端:django-admin startproject sitename 2.IDE创建Django程序时,本质上都是自动执行上述命令 常用命令: python man ...
- 自定义Http请求头并且获取
在一些开发需求中.我们需要把一些信息放到Http请求头中.比如我需要把签名信息 signature 放到Http请求头 所以就需要自定义请求头 signature ,用webClient发起请求 我这 ...
- 27.给input边框和背景颜色设置全透明
给input边框和背景颜色设置全透明,但是里面的字不会消失 1.让背景颜色变透明(二选一) background-color:rgba(0,0,0,0); background:rgba(0,0,0, ...
- Web Audio初步介绍和实践
Web Audio还是一个比较新的JavaScript API,它和HTML5中的<audio>是不同的,简单来说,<audio>标签是为了能在网页中嵌入音频文件,和播放器一样 ...
- laravel service provider
https://laravel-china.org/articles/6189/laravel-service-provider-detailed-concept https://oomusou.io ...
- Vue系列之 => 钩子函数生命周期
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jQuery工具--$.each()和$.merge()
jQuery.each(object, [callback])或者jQuery(object).each([callback]) 概述 通用遍历方法,可用于遍历对象和数组. 不同于遍历 jQue ...