スペースバーを押すと、chromeはエラーを表示します:「UncaughtTypeError:Object#has nomethod'Spacebar'」
(Firefoxは「this.Spacebarは関数ではありません」と言っています);
これが「Init();」によって初期化されるオブジェクトです。(ページの読み込み時...):
function KeyManager() {
this.mode="none";
this.Spacebar = ChatManagement.submitMessage;
this.KeyPress = function(e) {
if(e.keyCode==13) {
this.Spacebar();
}
}
this.switchKeySet= function(value) {
if(this.mode!=value) {
this.mode=value;
switch(value) {
case "login":
this.Spacebar = LoginManagement.SendLogin;
break;
case "chat":
this.Spacebar = ChatManagement.submitMessage;
break;
default:
case "none":
break;
}
document.onkeypress=this.KeyPress;
}
}
初期化関数:
function Init() {
ChatManagement = new ChatManager();
LoginManagement= new Login();
KeyManagement= new KeyManager();
KeyManagement.switchKeySet("chat");
}
チャット管理オブジェクト:
function ChatManager() {
this.submitMessage = function() {
$("Message").focus();
var text = $("Message").value;
if(text==""){
this.write('<p class="warning">Please enter a message');
return;
}
try{
SendMessage(text);
this.write('<p class="event">Sent: '+text)
} catch(exception){
this.write('<p class="warning"> Error:' + exception);
}
$("Message").value="";
}
}
ChatManagerの「this.submitMessage()」が機能する
「console.log(this.Spacebar);」を使用する場合 「switchKeySet();」の最後 「this.submitMessage()」のコードを取得します。
「this.KeyPress()」の開始時に使用すると、「undefined」になります。
この場合の関数を持つ複数のswitchステートメントとjavascript-libariesを避けようとしています.....
誰かがエラーがどこにあるか知っていますか?iveは、「this.spacebar」が未定義の「this.submitMessage」を取得するように感じましたが、initは最初にChatManagerを初期化し、initが完了した後にスペースバーを押します。
(または、私が試したように関数を渡すことはできませんか?)%_%。