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调用方法需要注意的地方 之一的更多相关文章

  1. js拼的onclick调用方法需要注意的地方 之二

    那如果之前的方法不行,想传递json对象怎么办呢? 使用下面这种方法, getA = function(){ var obj = {'projectId':123,'projectName':'aac ...

  2. iOS js oc相互调用(JavaScriptCore)---js调用iOS --js里面通过对象调用方法

    下来我们看第二种情况 就是js 中是通过一个对象来调用方法的. 此处稍微复杂一点我们需要使用到 JSExport 凡事添加了JSExport协议的协议,所规定的方法,变量等 就会对js开放,我们可以通 ...

  3. 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法

    OS js oc相互调用(JavaScriptCore)   接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...

  4. Js拼Json对象

     我们通常会拼字符串,但是拼字符串的话,遇见占位符会出错.  下面分享一个拼js拼json对象的方法:          var jsonArr = [];                     $ ...

  5. 关于js中函数的调用问题

    js中函数的调用方法 1.直接调用 函数名(参数): 2.通过指向函数的变量去调用 例如: var myval = 函数名: 此刻 myval是指向函数的一个指针: myval(实际参数):此刻调用的 ...

  6. angularjs $swipe调用方法

    angularjs 的$swipe,用法: $swipe.bind(angular.element(document),{ start: function(pos) { }, move: functi ...

  7. 【JS】<a>标签调用js中函数的几种方法

    我们常用的在a标签中有点击事件: a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而 ...

  8. Magento中调用JS文件的几种方法

    一.全局调用方法: 通过该方法每个页面都会引用这个JS文件,除非是类似jQuery这样的系统文件,不然不推荐这种方法. 文件路径:/app/design/frontend/default/Your_T ...

  9. JS函数的定义与调用方法

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式:先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来 ...

随机推荐

  1. - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, ma

    $ composer install Loading composer repositories with package information Installing dependencies (i ...

  2. 提供的STC89C52RC单片机GPS在LCD1602液晶只显示welcome to use问题?

    1.使用USB-TTL接GPS单独测试GPS定位在所处环境看是否能定位到. 2.检查自己使用的单片机是不是STC89C52RC型号,提供例程使用的这个型号单片机.如果使用其他51单片机,请先使用STC ...

  3. 图片加载Picasso

    https://github.com/square/picasso 基本用法 // 基本用法 // 普通加载图片 Picasso.with(PicassoActivity.this) .load(&q ...

  4. in型子查询陷阱,exists子查询

    in 型子查询引出的陷阱 select goods_id from goods where cat_id in (1,2,3) 直接用id,不包含子查询,不会中陷阱 题: 在ecshop商城表中,查询 ...

  5. 多种方法求java求整数的位数

    方法一 private static int getNumLenght(long num){ num = num>0?num:-num; return String.valueOf(num).l ...

  6. C#统计目录中文件MD5值

    1. [代码]统计目录中文件MD5值 using System.IO;using System.Security.Cryptography;using System.Collections;using ...

  7. maven 3.2.5 的安装及简单示例

    http://www.mvnrepository.com 一直没有使用maven,它的作用就不说了,这二天需要用到,发现网上都是以前的版本,所以,我一边配置,一边记录. 一 下载maven 现在很多I ...

  8. 分享知识-快乐自己:大数据(hadoop)环境搭建

    大数据 hadoop 环境搭建: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce ...

  9. 学习c++的优秀博客(转)

    http://zhedahht.blog.163.com/  本博客讨论程序员面试题,并主要集中在C/C++.数据结构算法和算法上.http://saturnman.blog.163.com/ sat ...

  10. POJ 2240 Arbitrage(Floyed-Warshall算法)

    题意:给出n种货币,m种兑换比率(一种货币兑换为另一种货币的比率),判断测试用例中套汇是否可行.(套汇的意思就是在经过一系列的货币兑换之后,是否可以获利.例如:货币i→货币j→货币i,这样兑换后,是否 ...