2013-03-02 33 views
0

奇怪的問題。很難用幾句話來形容,但我會嘗試。 (是JavaScript初學者)。奇事件處理錯誤:num.toString不是函數

當鼠標懸停在.u標籤上時,我希望它做某件事。所以,我有:

var dotUElements = document.getElementsByClassName("u"); 

for (var ii = 0; ii < dotUElements.length; ii++) { 
    dotUElements[ii].onmouseover = createHandler1(dotUElements[ii]); 
    dotUElements[ii].onmouseout = createHandler2(dotUElements[ii]); 
} 

然後添加處理程序:

function createHandler1(myobj) { 
    return (function() {ff1(myobj);}); 
} 

function createHandler2(myobj) { 
    return (function() {ff2(myobj);}); 
} 

我的功能FF1的鼠標懸停和FF2鼠標出有:

function ff1 (myobj) { 
    myobj.style.color="red"; 
    var uChar = myobj.firstChild.nodeValue; 
    var uNum = uChar.charCodeAt(0); 
    uName = unicodeTable(uNum); 
    var uHex = (uNum).toSring(16); 
} 

function ff2 (myobj) { 
    myobj.style.color="black"; 
} 

問題是最後一行

var uHex = (uNum).toSring(16); 

它會產生錯誤:

Error: TypeError: uNum.toSring is not a function 

如果我通過簡單地

(30).toSring(16); 

相同的錯誤替換該行。有什麼問題的提示?我在 http://xahlee.info/js/ex/xx_test.html

+1

它應該toString – 2013-03-02 22:33:16

+0

darn。花了一個小時。我的模板系統插入了Sring ... thx @harsha – 2013-03-02 22:43:08

+0

或者你的模板系統可能不會識別't';) – 2013-03-02 22:44:12

回答

-1

這裏有一個工作演示的代碼,你的例子

function unicodeTable(num) { 
 
    var unicodedata = { 
 
    0x2190: "LEFTWARDS ARROW", 
 
    0x2191: "UPWARDS ARROW", 
 
    0x2192: "RIGHTWARDS ARROW", 
 
    0x2193: "DOWNWARDS ARROW", 
 
    }; 
 
    return unicodedata[num]; 
 
} 
 

 
function createHandler1(myobj) { 
 
    return (function() { 
 
    ff1(myobj); 
 
    }); 
 
} 
 

 
function createHandler2(myobj) { 
 
    return (function() { 
 
    ff2(myobj); 
 
    }); 
 
} 
 

 
function ff1(myobj) { 
 
    myobj.style.color = "red"; // test code. so we know it's activated 
 
    var uChar = myobj.firstChild.nodeValue; 
 
    var uNum = uChar.charCodeAt(0); 
 
    uName = unicodeTable(uNum); 
 
    var uHex = (uNum).toString(16); 
 
    alert(uHex); 
 
} 
 

 
function ff2(myobj) { 
 
    myobj.style.color = "black"; // test code. so we know it's activated 
 
} 
 

 
var dotUElements = document.getElementsByClassName("u"); 
 

 
for (var ii = 0; ii < dotUElements.length; ii++) { 
 
    dotUElements[ii].onmouseover = createHandler1(dotUElements[ii]); 
 
    dotUElements[ii].onmouseout = createHandler2(dotUElements[ii]); 
 
}
<body> 
 

 
    <h1>unicode test 3</h1> 
 

 
    <p> 
 
    <b class="u">←</b> 
 
    <b class="u">→</b> 
 
    <b class="u">↑</b> 
 
    <b class="u">↓</b> 
 
    </p> 
 

 
    <p>when mouse hover on b.u element, show the unicode name.</p> 
 
</body>

我增加了一個alert(uHex);顯示的值。

讓我知道它是否無效。

+0

@Hill:FYI,OP接受了答案,他/她這樣做了,因爲他們明白我的意思!問題? – 2016-07-27 08:39:13

+0

噢,好吧,我想這完全消除了有人會一起來問一個重複問題的想法,難道不是Harsha Venkabashaboopie? – Hill 2016-07-27 17:41:31

+0

@Hill:大聲笑,你聽起來像個小孩,叫着名字。和平兄弟:D – 2016-10-06 18:26:29