20

您好我正在尝试使用 HTML onclick 函数传递多个值。我使用 Javascript 创建表格

var user = element.UserName;
var valuationId = element.ValuationId;
$('#ValuationAssignedTable').append('<tr> <td><a href=# onclick="return ReAssign(\'' + valuationId + ',' + user + '\')">Re-Assign</a> </td>  </tr>');

但是在我的 Javascript 函数中,用户名是未定义的,并且值是一个字符串,其中值和用户名相结合

function ReAssign(valautionId, userName) {
    valautionId;
    userName;

}
4

8 回答 8

41

如果valuationIduser是 JavaScript 变量,并且源代码是纯静态 HTML,不是以任何方式生成的,您应该尝试:

<a href=# onclick="return ReAssign(valuationId,user)">Re-Assign</a>

如果它们是从 PHP 生成的,并且它们包含字符串值,请在每个变量周围使用转义引号,如下所示:

<?php
    echo '<a href=# onclick="return ReAssign(\'' + $valuationId + '\',\'' + $user + '\')">Re-Assign</a>';
?>

逻辑类似于问题中的更新代码,它使用 JavaScript 生成代码(也许使用 jQuery?):不要忘记将转义引号应用于每个变量:

var user = element.UserName;
var valuationId = element.ValuationId;
$('#ValuationAssignedTable').append('<tr> <td><a href=# onclick="return ReAssign(\'' + valuationId + '\',\'' + user + '\')">Re-Assign</a> </td>  </tr>');

这个故事的寓意是

'someString(\''+'otherString'+','+'yetAnotherString'+'\')'

将被评估为:

someString('otherString,yetAnotherString');

而您需要:

someString('otherString','yetAnotherString');
于 2012-11-08T08:53:08.983 回答
12

解决方案:在 JS 中生成的 html 使用 onclick 传递多个参数

对于在 JS 中生成的 html,请执行以下操作(我们使用单引号作为字符串包装器)。每个参数都必须用单引号括起来,否则您的所有参数都将被视为单个参数,例如 functionName('a,b') ,现在它是一个值为 a,b 的单个参数。

我们必须使用字符串转义字符反斜杠()来用单引号关闭第一个参数,在其间给出一个分隔符逗号,然后用单引号开始下一个参数。(这是使用的魔法代码'\',\''

例子:

$('#ValuationAssignedTable').append('<tr> <td><a href=# onclick="return ReAssign(\'' + valuationId  +'\',\'' + user + '\')">Re-Assign</a> </td>  </tr>');
于 2014-06-05T08:09:57.593 回答
3
 $Name= "'".$row['Name']."'";
  $Val1= "'".$row['Val1']."'";
  $Year= "'".$row['Year']."'";
  $Month="'".$row['Month']."'";

 echo '<button type="button"   onclick="fun('.$Id.','.$Val1.','.$Year.','.$Month.','.$Id.');"  >submit</button>'; 
于 2018-08-01T17:46:29.257 回答
3

用反引号( ` ) 将每个参数括起来

例子:

<button onclick="updateById(`id`, `name`)">update</button>

function updateById(id, name) {
   alert(id + name );
   ...
}
于 2020-09-16T19:44:57.010 回答
2

请试试这个

for static values--onclick="return ReAssign('valuationId','user')"
for dynamic values--onclick="return ReAssign(valuationId,user)"
于 2012-11-08T08:54:25.530 回答
0

那是因为您将字符串传递给函数。只需删除引号并传递实际值:

<a href=# onclick="return ReAssign(valuationId, user)">Re-Assign</a>

猜测 ReAssign 函数应该返回trueor false

于 2012-11-08T08:56:10.433 回答
0

这里有几件事...

如果你想在 onclick 事件发生时调用一个函数,你只需要函数名加上参数。

然后,如果您的参数是一个变量(它们看起来像),那么您将不需要在它们周围加上引号。不仅如此,如果这些是全局变量,您还需要在“窗口”中添加。在此之前,因为它是包含所有全局变量的对象。

最后,如果这些参数不是变量,您需要排除斜线来转义这些字符。由于 onclick 的值是用双引号括起来的,所以单引号不会成为问题。所以你的答案看起来像这样......

<a href=# onclick="ReAssign('valuationId', window.user)">Re-Assign</a>

如果您想要的不仅仅是快速解决方案,这里还有一些额外的事情需要注意。

您看起来像是在尝试使用 + 运算符来组合 HTML 中的字符串。HTML 是一种脚本语言,因此当您编写它时,整个内容本身就是一个字符串。从现在开始您可以跳过这些,因为它不是您的浏览器将运行的代码(只是一大堆东西,任何已经存在的东西都是浏览器具有特殊含义的东西)。

接下来,您使用的锚标记/链接实际上不会将用户带到另一个网站,只是运行一些代码。我会使用锚标记以外的其他东西,并使用适当的 CSS 来格式化它以使其看起来像你想要的那样。这实际上取决于设置,但在许多情况下,span 标签就可以了。给它一个类(如 class="runjs")并为此设置 CSS 规则。要让它模仿链接的行为,请使用以下命令:

.runjs {
    cursor: pointer;
    text-decoration: underline;
    color: blue;
}

这使您可以省略无论如何都没有使用的 href 属性。

最后,您可能希望使用 JavaScript 来设置此链接的 onclick 属性的值,而不是手写。它通过将页面代码与页面结构分开来保持页面清洁。在您的课堂上,您可以像这样更改所有这些链接...

var links = document.getElementsByClassName('runjs');
for(var i = 0; i < links.length; i++)
    links[i].onclick = function() { ReAssign('valuationId', window.user); };

虽然这在某些较旧的浏览器中不起作用(因为 getElementsByClassName 方法),但它只有三行,并且完全符合您的要求。这些链接中的每一个都有一个与之相关的匿名函数,这意味着除了该标签的 onclick 值之外,它们没有任何变量与它们相关联。另外,如果您愿意,您可以通过这种方式包含更多代码行,所有代码都集中在一个整洁的位置。

于 2012-11-08T09:25:52.240 回答
-1
function ReAssign(valautionId, userName) {
   var valautionId 
   var userName 
 alert(valautionId);
 alert(userName);
  }

<a href=# onclick="return ReAssign('valuationId','user')">Re-Assign</a>
于 2012-11-08T09:00:06.230 回答