JS函数如何传递带空格参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS函数如何传递带空格参数相关的知识,希望对你有一定的参考价值。

比如:A(str1,str2,str3)为函数,通过点链接如:<a title='abc dd' href=javascript:add_css('aa','abc dd,'10')>abc dd</a>调用函数,但点abc dd时,提示出错,如果将所有abc dd中空格去掉就行,但现在不去去空格,有什么办法解决

Javascript函数中传递带空格的参数

       通常在页面中要让某些内容点击后产生点击事件(非页面跳转)都会使用onclick,但是这样不适于需要传递参数的情况,于是写成直接调用Javascript函数的方式:<a href=javascript:somefunction(args)>content</a>。注意,这么写是有问题的,问题就在于somefunction中的参数args的值不能含有空格,否则浏览器会认为空格后面的内容是<a>标签的某个属性,正确的写法应该是用引号将javascript:somefunction(args)引起来。另外还有一种方法可不必加这对引号,先将可能带空格的参数用escape函数处理一下,然后在somefunction中用unescape函数解码就行了。值得注意的是用encodeURI、decodeURI加解码却不能成功。

 encodeURIComponent和decodeURIComponent三对组合之间的区别:

    escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

    encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

    encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

           简单总结一下用法,在不经过URL的时候,即纯Javascript调用用escape;涉及URL时,通常用encodeURI对整个URL进行处理,仅当URL中含有特殊参数时,对该特殊参数局部使用encodeURIComponent。

参考技术A 代码写的不规范,将html标签的属性值放到双引号中,改后如下:
<a title="abc dd" href="javascript:add_css('aa','abc dd','10');">abc dd</a>
这样就可以了
如果还有问题欢迎追问,问题解决请及时选为满意回答,谢谢.本回答被提问者和网友采纳
参考技术B <a title='abc dd' href=‘javascript:add_css(“aa”,“abc dd”,“10”)’>abc dd</a>

Promise:如何传递带参数的函数? [复制]

【中文标题】Promise:如何传递带参数的函数? [复制]【英文标题】:Promise: how to pass function with parameters? [duplicate] 【发布时间】:2019-01-12 09:05:18 【问题描述】:

在下面的测试代码中,我尝试将带有参数(即 t2、t3)的预定义函数传递给 then。但它抱怨“r”未定义。

var Promise = require('bluebird');

var t2 = function(r) 
    console.log("2r: " + r);
    return 2 * r;
;

var t3 = function(r) 
    console.log("3r: " + r);
    return 3 * r;
;

new Promise(function(resolve, reject) 

    setTimeout(function() 
        resolve(1);
        reject(2)
    , 1000);
)
.then(t2(r), t3(r))
.then(t2(r), t3(r))
.then(t2(r), t3(r));

【问题讨论】:

【参考方案1】:

只需传递函数名称即可:

var t2 = function(r) 
  console.log("2r: " + r);
  return 2 * r;
;

var t3 = function(r) 
  console.log("3r: " + r);
  return 3 * r;
;

new Promise(function(resolve, reject) 

    setTimeout(function() 
      resolve(1);
      reject(2)
    , 1000); // (*)

  )
  .then(t2, t3)
  .then(t2, t3)
  .then(t2, t3);

如果你实际上想要传递额外的参数你事先知道,让t2t3高阶函数return 函数,以便您可以在 .then 的参数列表中调用:

var t2 = extra => r => 
  console.log("2r: " + r);
  console.log('extra param: ' + extra);
  return 2 * r;
;

var t3 = extra => r => 
  console.log("3r: " + r);
  console.log('extra param: ' + extra);
  return 3 * r;
;


const r = 'foo';
new Promise(function(resolve, reject) 

    setTimeout(function() 
      resolve(1);
      reject(2)
    , 1000); // (*)

  )
  .then(t2(r), t3(r))
  .then(t2(r), t3(r))
  .then(t2(r), t3(r));

【讨论】:

【参考方案2】:

您没有将r 传递给函数。 .then 将值传递给回调。

new Promise(function (resolve, reject) 
  setTimeout(function () 
    resolve(1)
    reject(2)
  )
)
.then((r) => /* do stuff with r here */)

如果您需要注销结果,您会得到类似.then((r) =&gt; t2(r); t3(r); ) 的信息。如果您只需要返回乘法函数(或其他)的结果,.then(t2) 将起作用(对于一个函数)。请注意,我在这里使用箭头函数;它们现在可以在 Node 和大多数浏览器中使用,但如果需要,您可以使用 function 关键字。

你在这里也奇怪地使用了逗号运算符——记住,它基本上与有一个语句和 then 一个返回相同,因为你的函数不执行任何突变(只是log 副作用),您实际上不会使用每个 .then 中的第一个函数影响任何数据。

【讨论】:

以上是关于JS函数如何传递带空格参数的主要内容,如果未能解决你的问题,请参考以下文章

Uncaught SyntaxError : Unexpected token ILLEGAL js传递带空格的参数

js调用一个带参数的函数,却不给参数,会怎么处理

解决 js setTimeout 传递带参数的函数无效果

js 如何创建带返回值的函数

js 函数改写 改成带参数的函数

JS 传递URL带中文的参数