首先,你有一個錯誤在你的}
放置,這消除(如已被納文說明)您的if
/else
塊從您的功能(導致錯誤,因爲a
然後undefined
在此塊評估點
此外,你的按鈕在您指定的事件處理程序的HTML,:
<input type=button value="Adjust Image" onchange="myfunction()">
一個的type="button"
input
沒有onchange
/change
事件;但它確實有一個click
/onclick
:
<input type=button value="Adjust Image" onclick="myfunction()">
然後,你似乎已經混亂中,你打電話給你的函數的地方:
Select Shows: | selectedIndex is: | You call: | Should (probably) call:
-----------------+----------------------+------------------+-------------------------
Larger | 0 | moveImage() | makeLarger()
Smaller | 1 | makeinvisible() | makesmaller()
Move | 2 | makelarger() | moveimage()
Invisible | 3 | makesmaller() | makeinvisible()
之後,你要調整使用節點本身的屬性:image.height
和image.width
的大小(在makesmaller()
和makelarger()
中)。這些都不是圖像的性能,但圖像的style
性質的,而應該是:
image.style.width = '1000';
image.style.height = '1000';
當然,這些屬性值需要一個單位,所以你需要添加px
還有:
image.style.width = '1000px';
image.style.height = '1000px';
,並提供:
function myfunction() {
var selection = document.getElementById('changes');
var a = selection.selectedIndex;
if (a === 0) {
makelarger();
} else if (a == 1) {
makesmaller();
} else if (a == 2) {
moveimage();
} else if (a == 3) {
makeinvisible();
}
}
function moveimage() {
var x = document.getElementById('image');
x.style.marginTop = "50px";
}
function makeinvisible() {
var x = document.getElementById('image');
x.style.visibility = "hidden";
}
function makelarger() {
var x = document.getElementById('image');
image.style.width = "1000px";
image.style.height = "1000px";
}
function makesmaller() {
var x = document.getElementById('image');
image.style.width = "100px";
image.style.height = "100px";
}
。
現在,進行改進。
if
/else
是不必要的昂貴,你多次重新評估相同的變量。爲了節省時間,使用switch() {...}
代替,曾經對變量:
switch (a) {
case 0:
makelarger();
break;
case 1:
makesmaller();
break;
case 2:
moveimage();
break;
case 3:
makeinvisible();
break;
}
JS Fiddle demo。
隨着switch
每情況進行檢查(包括第一匹配案後的那些),所以break
是重要的,以迫使後續檢查要被跳過,而對於switch
要退出。
也沒有必要建立之前的開關(尤其是因爲你不使用它們之後)兩個變量,所以你還不如,而是簡單地做:
function myfunction() {
switch (document.getElementById('changes').selectedIndex) {
case 0:
makelarger();
break;
case 1:
makesmaller();
break;
case 2:
moveimage();
break;
case 3:
makeinvisible();
break;
}
}
JS Fiddle demo。
此外,在線的事件處理程序(嘗試使用onchange
,隨後在我的更新使用onclick
)是實踐的差,因爲它會導致「突兀的JavaScript」,這是難以維持,所以我們移動事件處理程序進入的JavaScript本身,給相關的元件的id
(由能夠容易地對其進行定位)後:
<input id="buttonElem" type=button value="Adjust Image" />
document.getElementById('buttonElem').addEventListener('click', myfunction);
JS Fiddle demo。
因爲addEventListener()
沒有很好地支持IE,直到,我認爲,第10版,你可能會,但更喜歡使用(與上input
相同id
):
document.getElementById('buttonElem').onclick = myfunction;
JS Fiddle demo。
你也當然的,而不是維持適當的指標對功能的switch
使用地圖的索引和功能的:
var funcMap = {
0 : makelarger,
1 : makesmaller,
2 : moveimage,
3 : makeinvisible
};
function myfunction() {
var select = document.getElementById('changes');
funcMap[select.selectedIndex]();
}
JS Fiddle demo。
這可能允許您將不同的對象傳遞給該函數,該函數允許多個元素調用相同的函數,並根據傳入的映射調用不同的輔助函數(在這種情況下,它的用途有限)因爲你只有一個select
元素調用該函數;但爲了將來使用它值得記住)。
但是,最好確保有一個函數被調用,或者是該地圖中與我們正在使用的密鑰相關的屬性;所以我們可以將之前的JavaScript改編爲:
function myfunction() {
var select = document.getElementById('changes');
if (funcMap.hasOwnProperty(select.selectedIndex)) {
funcMap[select.selectedIndex]();
}
}
JS Fiddle demo。
在這一點上,當然,我們正在重複以前的錯誤,並重新評估兩次(select.selectedIndex
)同樣的事情,所以不是:
function myfunction() {
var selected = document.getElementById('changes').selectedIndex;
if (funcMap.hasOwnProperty(selected)){
funcMap[selected]();
}
}
JS Fiddle demo。
我注意到你沒有關閉''標籤 –