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、リテラルで二重引用符をエスケープする必要がないため、文字エスケープが 1 レベル少なくなります。レベル。

$('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

これを使用してください。パラメータがPlayVideo必要です''

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 に答える