js拼的onclick调用方法需要注意的地方 之一
1.首先,明确一点,js方法中参数可以传递字符串,对象,number类型等,对象传递的是引用,方法中修改了,会影响到方法外面的对象。
2.下面重现项目中遇到的一个问题:(其实就是要明白通过引号来拼接字符串时的问题)
有一个通用的js方法如下:
//邮件催送
sendTcMail = function(obj) {
//异步请求查询级联子列表的方法并返回json数组
jQuery.ajax({
url : cur_url+"/tapeoutCheck/mailReminder",
type : 'post',
data : JSON.stringify(obj),
dataType : 'json',
contentType:'application/json;charset=utf-8',
success : function (data, textStatus) {
if (data.success == 1) {
$.gritter.add({
title: '提示',
text: '操作成功.'+data.message,
class_name: 'success'
});
}
if (data.success == 2) {
$.gritter.add({
title: '提示',
text: '操作失败.'+data.message,
class_name: 'danger'
});
}
},
error: function (XMLHttpRequest, textStatus) {
$.gritter.add({
title: '提示',
text: '邮件催送失败.',
class_name: 'danger'
});
}
});
}
方法参数需要一个json对象,然后通过JSON.stringify(obj)方法转换为json字符串,传递到后台。
(1)。直接在jsp中onclick方法调用该方法:
<a href="javascript:void(0);" onclick="sendTcMail({'projectId':223,'projectName':'abc'})">test</a>
这样是最简单的,方法中直接传递json对象就可以了。
(2)第二种方法。
如下,有一个div,通过js动态拼接了一个a标签放到div中,a标签中拼出来onclick中的方法:
<div id="test"></div>
$(function() {
getA = function(){
var a = '<a href="javascript:void(0);" onclick="sendTcMail({\'projectId\':223,\'projectName\':\'abc\'})">test</a>';
$('#test').html(a);
}
getA();
})
这getA方法中通过字符串拼接出了A标签,里面onclick中方法参数其实和第一种是一样的,不过外层有一个单引号,所有参数的单引号进行了转义。这种和第一种是一样,传递的也是json对象
(3)这种是第二种的衍生,需要特别注意,这次onclick中参数是通过变量传递进去的
getA = function(){
var obj = {'projectId':123,'projectName':'aac'};
var a = '<a href="javascript:void(0);" onclick="sendTcMail(obj)">test</a>';
$('#test').html(a);
}
如果是这样写的,会报错obj未定义,因为a是字符串,obj不是用的上面的var obj变量,所以js解析器不认识obj。
getA = function(){
var obj = {'projectId':123,'projectName':'aac'};
var a = '<a href="javascript:void(0);" onclick="sendTcMail(\'obj\')">test</a>';
$('#test').html(a);
}
如果是这样,那'obj'就是字符串传递到方法中的,不是用的var的那个obj对象。也不行。
getA = function(){
var obj = {'projectId':123,'projectName':'aac'};
var a = '<a href="javascript:void(0);" onclick="sendTcMail('+obj+')">test</a>';
$('#test').html(a);
}
很多人肯定会这样拼接自己定义的obj 对象变量,但是这样也是不可以的,这个obj变量拼在字符串中是一个对象引用,并不是{'projectId':123,'projectName':'aac'},拼出来方法会变成这样的sendTcMail([object Object]),会报错的,这种错误是最常见的,这是这篇博客的重点,要知道这错误的原因。
如果只是传递obj对象中的projectId属性可以这样拼接:
getA = function(){
var obj = {'projectId':123,'projectName':'aac'};
var a = '<a href="javascript:void(0);" onclick="sendTcMail('+obj.projectId+')">test</a>';
$('#test').html(a);
}
这传递到方法中的就是obj的projectId属性值123,这是可以的。
js拼的onclick调用方法需要注意的地方 之一的更多相关文章
- js拼的onclick调用方法需要注意的地方 之二
那如果之前的方法不行,想传递json对象怎么办呢? 使用下面这种方法, getA = function(){ var obj = {'projectId':123,'projectName':'aac ...
- iOS js oc相互调用(JavaScriptCore)---js调用iOS --js里面通过对象调用方法
下来我们看第二种情况 就是js 中是通过一个对象来调用方法的. 此处稍微复杂一点我们需要使用到 JSExport 凡事添加了JSExport协议的协议,所规定的方法,变量等 就会对js开放,我们可以通 ...
- 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法
OS js oc相互调用(JavaScriptCore) 接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...
- Js拼Json对象
我们通常会拼字符串,但是拼字符串的话,遇见占位符会出错. 下面分享一个拼js拼json对象的方法: var jsonArr = []; $ ...
- 关于js中函数的调用问题
js中函数的调用方法 1.直接调用 函数名(参数): 2.通过指向函数的变量去调用 例如: var myval = 函数名: 此刻 myval是指向函数的一个指针: myval(实际参数):此刻调用的 ...
- angularjs $swipe调用方法
angularjs 的$swipe,用法: $swipe.bind(angular.element(document),{ start: function(pos) { }, move: functi ...
- 【JS】<a>标签调用js中函数的几种方法
我们常用的在a标签中有点击事件: a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而 ...
- Magento中调用JS文件的几种方法
一.全局调用方法: 通过该方法每个页面都会引用这个JS文件,除非是类似jQuery这样的系统文件,不然不推荐这种方法. 文件路径:/app/design/frontend/default/Your_T ...
- JS函数的定义与调用方法
JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式:先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来 ...
随机推荐
- sap ftp 处理
[转] SAP FTP Function 本文示例如何使用SAP FTP Function将文件从应用服务器传输到另外一个FTP服务器上. DATA: BEGIN OF ig_ftp_result O ...
- 用Visual Studio编辑Linux代码
估计很多人都是用惯了Visual Studio的主,怎么也不适应Linux的一套编辑器,比如vim.source insight这些东西,可视化的eclipse效果还好点,但一般以远程共享一台Linu ...
- linux基础part4
linux基础 一.系统监控命令 1.top命令: a.如图显示使用top命令查看系统的当前运行的情况.如图对top命令执行的结果做了简单的图解,下面针对每一项做详细的解释. b.第一行显示的内容依次 ...
- 第12条:不要在for和while循环后面写else块
核心知识点: (1)一般的if/else是前面不执行,后面才执行,循环下面的else是前面执行完后面才会执行,如果是break打断也不会执行.循环为空或False也不执行. (2)try/expect ...
- MVC中不能使用ViewBag
在工程文件中添加 <Reference Include="Microsoft.CSharp" /> <Reference Include="System ...
- Effective java -- 1
写博客我也不知道是不是一个好习惯,但是目前还不知道有什么其他更有效率的学习方法.现在的学习方法:看书,写博客.如果看明白一个东西,去写博客的话,这通常是一个浪费时间的行为,但是这个过程同样帮助自己二次 ...
- jQuery宽屏游戏焦点图
在线演示 本地下载
- 汇编语言入门(在debug中编辑和调试程序)
2013-06-02 17:09 4252人阅读 评论(2) 收藏 举报 分类: 汇编语言(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. 我们在Windows中进入的Dos方式,实际 ...
- Web Worker浅学
Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面.它独立于其他脚本,不会影响页面的性能.您 ...
- 从信用卡欺诈模型看不平衡数据分类(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制。过采样后模型选择RF、xgboost、神经网络能够取得非常不错的效果。(2)模型层面:使用模型集成,样本不做处理,将各个模型进行特征选择、参数调优后进行集成,通常也能够取得不错的结果。(3)其他方法:偶尔可以使用异常检测技术,IF为主
总结:不平衡数据的分类,(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制.过采样后模型选择RF.xgboost.神经网络能够取得非常不错的效果.(2)模型层面:使用模型 ...