如何从href调用javascript函数?

时间:2015-02-12 07:27:01

标签: javascript jquery ajax json

我有两个javascript函数madeAjaxCall()和getBookCall(bookId)分别获取图书清单和章节列表。

我正在尝试从函数madeAjaxCall()中调用getBookCall(bookId)。

function madeAjaxCall(){
 $.ajax({
  type: "GET",
  url: "http://localhost:8080/restApp/book/list",
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  success: function(data){
            delete_table();
            if(data){
                var len = data.length;
                var txt = "";
                txt += "<tr><th>"+"bookId"+"</th><th>"+"bookName"+"</th><th>"+"Chapter Details"+"</th></tr>";   
                if(len > 0){
                    for(var i=0;i<len;i++){
                        if(data[i].bookId != null && data[i].bookName != null){                                        
                            /* txt += "<tr><td>"+data[i].bookId+"</td><td>"+data[i].bookName+"</td><td><a href="+ "http://localhost:8080/restApp/chapter/list/"+ data[i].bookId +">"+"Chapter details"+"</a></td></tr>";       */           
                             txt += "<tr><td>"+data[i].bookId+"</td><td>"+data[i].bookName+"</td><td><a href="+ "#"+" "+ "onclick=" +  +"getBookCall("+ data[i].bookId + ")"+";return false;" +">"+"Chapter details"+"</a></td></tr>";                  

                        }
                    }
                    if(txt != ""){
                        $("#table1").append(txt).removeClass("hidden");
                    }
                }
            }
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert('error: ' + textStatus + ': ' + errorThrown);
        }
    });
    return false;
}

另一个功能

function getBookCall(bookId){
 $.ajax({
  type: "GET",
  url: "http://localhost:8080/restApp/chapter/list/"+bookId,
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  success: function(data){
            delete_table2();
            if(data){
                var len = data.length;
                var txt = "";
                txt += "<tr><th>"+"chapterId"+"</th><th>"+"chapterName"+"</th></tr>";
                if(len > 0){
                    for(var i=0;i<len;i++){
                        if(data[i].chapterId != null && data[i].chapterName != null){
                            txt += "<tr><td>"+data[i].chapterId+"</td><td>"+data[i].chapterName+"</td></tr>";                   
                        }
                    }
                    if(txt != ""){
                        $("#table2").append(txt).removeClass("hidden");
                    }
                }
            }
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert('error: ' + textStatus + ': ' + errorThrown);
        }
    });
    return false;
}

我从函数 madeAjaxCall()获取JSON的书籍列表,并将列表附加到表格中。我想借助一个href从函数madeAjaxCall()中调用函数 getBookCall(bookId)。但是我无法在函数madeAjaxCall()中使用href调用函数 getBookCall(bookId)

这是来自函数madeAjaxCall的行,无法调用函数getBookCall(bookId)。

txt += "<tr><td>"+data[i].bookId+"</td><td>"+data[i].bookName+"</td><td><a href="+ "#"+" "+ "onclick=" +  +"getBookCall("+ data[i].bookId + ")"+";return false;" +">"+"Chapter details"+"</a></td></tr>";                   

1 个答案:

答案 0 :(得分:3)

此处在示例中,我使用自定义data-*属性来存储bookid,可以使用.data()获取,创建您的锚点,如:

txt += '<a class="myBookLink" href="#" data-bookid="' + data[i].bookId + '">Chapter details</a>"; 

然后使用Event Delegation委托事件方法使用.on()来绑定锚点击事件处理程序。

$(document).on('click', function(){
    getBookCall($(this).data('bookid'))
    return false;
})

重要提示:代替document,您应该始终使用最接近的静态容器。

对于即时解决方案,请正确使用引号。

txt += "<tr><td>" 
    + data[i].bookId 
    + "</td><td>" 
    + data[i].bookName
    +'</td><td><a href="#" onclick="getBookCall('+ data[i].bookId + ');return false;">Chapter details</a></td></tr>'; 

而不是

txt += "<tr><td>"+data[i].bookId+"</td><td>"+data[i].bookName+"</td><td><a href="+ "#"+" "+ "onclick=" +  +"getBookCall("+ data[i].bookId + ")"+";return false;" +">"+"Chapter details"+"</a></td></tr>";