0

所以我有这个按钮,它是在 java 脚本中动态添加的,但问题是想要将文件名作为参数发送给函数,我已经在 var 中保存了名称,名称通常类似于p164.epub。但由于某种原因,它不会接受参数。例如,如果我添加一个数字而不是文件,它会接受它并按预期工作

$('#result2').append("<button class ='removeBtn' onclick ='removeEbook("+file+")'>Remove</button>");

我的功能

function removeEbook(n)
{
  alert("yay");
}

有什么想法吗?

4

3 回答 3

3

你有 jQuery - 不要使用内联事件处理程序:

var file = '...';

$('<button class="removeBtn">').text('Remove').on('click', function() {
    // NB: "this" refers to the clicked button
    removeEbook(file);
}).appendTo('$#result2');

如果你坚持使用内联事件处理程序(你真的不应该),最好的做法是为你的 JS 字符串使用单引号,为你的 HTML 中的属性使用双引号,例如:

$('#result2').append('<button class="removeBtn" onclick="removeEbook(\''+file+'\')">Remove</button>');

请注意,正如所写,这会将处理程序绑定到file注册处理程序时具有的任何值(因为上面的代码将其转换为字符串常量),而不是触发它时具有的任何值。

请注意,如果file碰巧包含任何引号字符(这在某些系统上是完全合法的),您最终会得到一个非法的字符串常量。

以上只是不应使用内联事件处理程序的众多原因中的两个。它们容易出错(如您所见)。

于 2013-05-22T15:36:51.690 回答
1

您需要在字符串参数周围添加转义引号。

$('#result2').append("<button class ='removeBtn' onclick ='removeEbook(\'"+file+"\')'>Remove</button>");
于 2013-05-22T15:38:03.660 回答
-1

您必须在单引号中发送文件名并使用转义字符作为双引号,例如 belwo

$('#result2').append("<button class =\"removeBtn\" onclick =\"removeEbook('"+file+"')\">Remove</button>");
于 2013-05-22T15:39:55.970 回答