經過幾個小時的努力找出並閱讀文檔,我會放棄這一個。我來自嘗試學習Javascript的C/C++背景,我對DOM元素和Object之間的區別有些困惑。我以爲我明白了,但是當我在對象上調用某些函數時,比如「.addEventListener()」,我會遇到着名的「未定義不是函數」錯誤,以及其他有趣的事情。所以這裏有兩個使用SVG.js的嘗試。我基本上只是試圖添加一個事件監聽器到我迄今爲止在我的SVG畫布裏面生成的每個形狀,這樣當任何形狀被點擊時,它將獨立於所有其他形狀改變顏色。Javascript:DOM元素和對象之間的區別/「未定義不是函數」
在添加事件監聽器行上,我給出了「Undefined ...」,我用第二個版本解決了這個問題,但現在我得到了函數內唯一聲明的「Undefined ...」錯誤。
您能澄清一下DOM元素和對象之間的區別嗎,然後幫助我理解爲什麼在我的第二個示例中彈出「未定義不是函數」錯誤?謝謝。
版本1:canvas.get()返回一個對象,我已經產生的形狀中的一種,對 - 閱讀進度 - 出現錯誤()調用第2版
function changeColor(e) {
this.fill({color: currentColor});
}
//add event listeners for every element of SVG
var it;
for (it=3; it<=18; it++){
var canvasName = canvas.get(it);
canvasName.addEventListener("click", changeColor);
}
:現在正在添加的事件偵聽到DOM元素和「未定義不是一個函數」的錯誤出現在聲明的函數內(第2行)
function changeColor(e) {
this.fill({color: currentColor});
}
//add event listeners for every element of SVG
var it;
for (it=3; it<=18; it++){
//get string to search for id in DOM
var idName = "SvgjsRect" + (1006+it);
var box = document.getElementById(idName);
box.addEventListener("click", changeColor);
}
我的最終版本。我意識到他們基本上放棄了所有本地DOM功能,所以我使用了他們的事件綁定方法。
var changeColor = function() {
this.fill({color: currentColor});
}
//add event listeners for every element of SVG
var it;
for (it=3; it<=18; it++){
var box = canvas.get(it);
box.on('click', changeColor);
}
changeColor中的「this」關鍵字並不是指您認爲它的作用......定義了填充方法的對象是什麼?在svg.js中的 –
.fill()函數爲所有形狀原型(Rect,Circle等等)定義。看着它,我不認爲我在第2版中將它傳遞給一個形狀對象,而是DOM引用,所以可能是它,但是它又不會讓我添加一個事件處理程序來對象本身,所以不知道解決方法.... 使用console.log打印出對象,看到onclick爲null。它不應該與一個函數配對嗎?如果它沒有配對,它是如何進入changeColor()? –