0

我有 2 种方法,一种是内部方法,另一种是实例方法,当我调用内部函数 ( onkeydown="javascript:return checkChatBoxInputKey();") 时效果很好,
但是当我尝试激活onclick事件 ( onclick="this.CloseChatBox();) 时出现以下错误:

0x800a01b6 - Microsoft JScript 运行时错误:对象不支持属性或方法“CloseChatBox”

这是我的代码:

function ChatBox(){
    // Methods
    this.CloseChatBox = ChatBox.CloseChatBox;

    // Adding new chat box to page
    $(" <div />").attr("id", "chatbox")
    .html('<div class="chatboxhead">' +                                                    
          '<a href="javascript:void(0)" title="Close chat box" onclick="this.CloseChatBox();">X</a>' + // This line fails to work
                    '</div>' +
                    '<div class="chatboxbody">' +
                            '<textarea onkeydown="javascript:return checkChatBoxInputKey();"></textarea>' +
                    '</div>')
    .appendTo($("body"));

    $("#chatbox_" + this.CallId).show();

    return true;}

function checkChatBoxInputKey(){
    alert("checkChatBoxInputKey");}

ChatBox.CloseChatBox = function (){
    alert("CloseChatBox");}

我能做些什么?

4

1 回答 1

1

onclick,this中是<a>标签本身而不是ChatBox函数中的任何内容。

因此,您收到错误是因为<a>标签没有CloseChatBox方法。

强烈建议不要使用属性进行事件绑定。使用实际的事件处理程序。向<a>标签添加一个类,然后使用 jQuery 将一个事件绑定到它。

HTML:

<a href="javascript:void(0)" title="Close chat box" class="closeChatBox">X</a>

JavaScript(放置在ChatBox函数之外,在 a 内$(document).ready):

$('a.closeChatBox').click(function(){
    ChatBox.CloseChatBox();
});
于 2013-01-14T14:46:10.237 回答