我在JavaScript中有一个不会执行的方法.. 已经通过Firebug进行了调试,但我不知道问题可能是什么..
我有一张桌子,应该用视频链接填充单元格。
变量videoPath
包含链接。 vids.video
是我的目标。
var vids = {"video":
[
{
"name": "Video 1",
"path": "videos/band/vid1.f4v"
},
{
"name": "Video 2",
"path": "videos/band/vid2.f4v"
}
]
};
var i = 0;
for (property in vids.video) {
if(vids.video.hasOwnProperty(property)) {
videoPath = vids.video[i].path;
$('table.videos tr').append("<td><a class='videolink' href='javascript:void(0)' onclick='PlayVideo("+videoPath+")'>some divs</a></td>");
}
i++;
}
function PlayVideo(vidd) {
alert(vidd);
}
当我从方法括号中删除vidd
时,它可以正常工作:
$('table.videos tr').append("<td><a class='videolink' href='javascript:void(0)' onclick='PlayVideo()'>some divs</a></td>");
function PlayVideo() {
alert("It works!");
}
有什么想法吗?
答案 0 :(得分:3)
您必须在PlayVideo
来电的参数周围添加单引号。
$('table.videos tr').append("<td><a class='videolink' href='javascript:void(0)' onclick='PlayVideo(\\'"+videoPath+"\\')'>some divs</a></td>");
请注意,在javascript中指定应包含反斜杠的文字字符串时,必须使用双反斜杠。后者是必需的,因为html的表示级别的结果包含带有单引号分隔符的文字中的单引号。
当然你可以用{双引号括起videoPath
参数 - 这里你有一个更少的字符转义,因为你只需要转义append
调用的参数中的双引号没有必要逃避文字中的双引号在html级别。
$('table.videos tr').append("<td><a class='videolink' href='javascript:void(0)' onclick='PlayVideo(\""+videoPath+"\")'>some divs</a></td>");
答案 1 :(得分:1)
使用此选项,PlayVideo
的参数必须位于''
var videoPath ="C:\\test.avi";
$('body').append("<a class='videolink' href='javascript:void(0)' onclick=\"PlayVideo('" + videoPath + "')\">some divs</a>");
答案 2 :(得分:0)
这里有一些替代代码,可以消除对冗长的追加行的需要,并且无需担心引用的位置。
var cell = '<td><a class="videolink" data-path="#{path}">#{name}</a></td>';
$('table.videos tr').each(function (index, element) {
var path = vids.video[index].path;
var name = vids.video[index].name;
data = cell.replace('#{path}', path).replace('#{name}', name);
$(this).append(data);
});
$(document).on('click', '.videolink', function () {
playVideo($(this).data('path'));
});
function playVideo(path) {
console.log(path);
}