2013-01-01 100 views
1

可能重複:
JavaScript not being called in inline event handler在行功能沒有定義

試圖建立使用AJAX執行的操作基於喜歡/不喜歡系統一個JavaScript。喜歡和不喜歡的功能被命名爲「likeit」和「dislikeit」。

HTML:

<a class="btn" data-toggle="tooltip" title="I like this." id="like" onclick="likeit('abc123');"><i class="icon-thumbs-up"></i></a> 
<a class="btn" data-toggle="tooltip" title="I didn't like this." id="dislike" onclick="dislikeit('abc123');"><i class="icon-thumbs-down"></i></a> 

JS:

$(document).ready(function() { 
    "use strict"; 
    (function likeit(id) { 
     $.post("likeDislike.php", {likeID:id}, function(data) { 
      alert(data); 
      // Nothing to be displayed. 
     }); 
    }); 
    (function dislikeit(id) { 
    }); 
}); 

我得到谷歌瀏覽器的錯誤檢查元素是:

Uncaught ReferenceError: likeit is not defined 
Uncaught ReferenceError: dislikeit is not defined 

然而,他們被定義在那裏。

+0

所以你應該!你的功能被埋在封閉之下。 –

回答

7

您的onclick=".."東西(您不應該使用它)只能訪問全局範圍。您的函數在document.ready回調函數的範圍內定義。

正確的解決方案是使用JavaScript而不是內聯事件註冊您的處理程序。

$(document).ready(function() { 
    "use strict"; 

    function likeit(id) { ... } 
    function dislikeit(id) { ... } 

    var funcMap = { 
     'like': likeit, 
     'dislike': dislikeit 
    }; 

    $('.btn').on('click', function(e) { 
     e.preventDefault(); 
     var action = $(this).data('action'); 
     var id = $(this).data('id'); 
     var func = funcMap[action]; 
     if(func) { 
      func.call(this, id); 
     } 
    }) 
}); 

你的HTML也需要一些修改:

<a class="btn" data-toggle="tooltip" title="I like this." id="like" data-id="abc123" data-action="like"><i class="icon-thumbs-up"></i></a> 
<a class="btn" data-toggle="tooltip" title="I didn't like this." id="dislike" data-id="abc123" data-action="dislike"><i class="icon-thumbs-down"></i></a> 
+0

那麼我怎樣才能讓它訪問全球範圍? – TechKat

+0

@TechKat:將其分配給'window.whatever'。但它實際上是一個可怕的解決方案。查看我更新的答案,瞭解如何正確執行此操作。 – ThiefMaster

+1

親吻答案,而不是將其標記爲解決方案! :) –

1

試試這個

//make sure jquery library loaded here 

<a class="btn" data-toggle="tooltip" title="I like this." id="like" onclick="likeit('abc123');"><i class="icon-thumbs-up"></i></a> 
<a class="btn" data-toggle="tooltip" title="I didn't like this." id="dislike" onclick="dislikeit('abc123');"><i class="icon-thumbs-down"></i></a> 

<script type="text/javascript"> 
function likeit(id){ 
$.post("likeDislike.php", {likeID:id}, function(data) { 
      alert(data); 
      // Nothing to be displayed. 
     }); 

} 
function dislikeit(id) { 
    } 
</script>