如何从href为表中的多个链接调用javascript函数

时间:2014-10-14 07:20:00

标签: javascript href location-href

我有一个包含多个文件名的列的表。文件名实际上是链接,其中一些指向URL,其中一些指向本地文件。我可以成功下载本地文件,并在单独单击时指向新窗口中的URL。

但是,当我尝试通过href内的js函数传递文件名来动态执行此操作时,遇到Uncaught SyntaxError: Unexpected token :。当我只是在没有任何参数的情况下调用js函数时,这似乎不是问题,但是,所有链接只指向列中的最后一个文件名。我可以使用正确的文件名在浏览器javascript:openLink(filename)的底部看到,但随后会发生错误。

table

这是我的代码:

function searchAjax(){
    var $table = $("#tableGrid").tablesorter(),
            $tbody = $table.children("tbody");
            $.ajax({
                dataType: 'json',
                url: 'table_results',
                type: 'GET',
                data: $('#filterForm').serialize(),
                success: function(data) {
                    $("#tableGrid").find("tr:gt(0)").remove();
                    $.each(data, function(index, result) {
                        function openLink(value){
                            var link = value;
                            if(link.indexOf("http") > -1 ){
                                window.open(link, "_blank");
                            }
                            else{
                                location.href="/projectv1?fileName="+link;
                            }
                        };
                        $tbody.append(
                                "<tr>" +
                                "<td>" + result.regionCode + "</td>" +
                                "<td>" + result.nationCode + "</td>" +
                                "<td>" + '<a href="javascript:openLink('+result.link+')" target="_blank">link</a></td>"' +
                                "</tr>");

                    });
                        $("#tableGrid").trigger("update");
                }
            });
        };

1 个答案:

答案 0 :(得分:2)

您可以像这样更改您的html附加代码

$tbody.append(
    "<tr>" +
    "<td>" + result.regionCode + "</td>" +
    "<td>" + result.nationCode + "</td>" +
    "<td>" + '<a class="customLink" data-url="'+result.link+'">link</a></td>"' +
    "</tr>");

您可以将click事件处理程序添加到customLink。

$(this).data('url')从html元素的数据属性中检索链接数据。

jQuery(document).on(
{    
    click: function(e) 
    {
        var url = $(this).data('url');
        openLink(url);
    }
}
, '.customLink');

您还应该将openLink函数定义移动到外部范围