Javascript方法不会被执行

时间:2013-09-05 09:10:05

标签: javascript jquery html

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

有什么想法吗?

3 个答案:

答案 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>");

jsFiddle - DEMO

答案 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);
}