1

可能重复:
内联事件处理程序中未调用 JavaScript

尝试使用 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) {
    });
});

我在 Google Chrome 的检查元素中遇到的错误是:

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

然而,它们是在那里定义的。

4

2 回答 2

8

您的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>
于 2013-01-01T11:47:10.237 回答
0

尝试这个

//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>
于 2013-01-01T11:47:34.223 回答