0

我在 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!"); 
}

有任何想法吗?

4

3 回答 3

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>");
于 2013-09-05T09:15:13.820 回答
1

使用这个,参数forPlayVideo必须在''

var videoPath ="C:\\test.avi";

$('body').append("<a class='videolink' href='javascript:void(0)' onclick=\"PlayVideo('" + videoPath + "')\">some divs</a>");

jsFiddle - 演示

于 2013-09-05T09:24:59.343 回答
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);
}
于 2013-09-05T09:41:25.343 回答