2011-09-30 291 views
1

我有一個問題,爲什麼我的if-else語句不工作。爲什麼我的if-else語句不能正確執行?

我得到了一個帶有文本輸入的表單,並且當用戶鍵入他們想要的大小時,它應該可以直接編輯圖片。我使用jQuery中的addclass和removeclass方法。這是我的腳本:

function slide() { 
    var n = Number(document.getElementById('Getal1').value) 

    if (n >= 101 && n < 201) 
     $(openDiv1()); 

    else if(n > 200) 
     $(openDiv2()); 

    else if(n >= 0 && n < 101) 
     $(closeDiv()); 

    else { 
     alert("You did not enter a number!") 
    } 
} 

$(function openDiv1() { 

    $("#ombouw_wrap").addClass("Addclass_ombouw_wrap_2block", 1, callback); 
    return false; 
}); 

function callback() { 
    setTimeout(function() { 
     $("#midden").removeClass("Addclass_ombouw_wrap_1block Addclass_ombouw_wrap_3block"); 
    }, 0); 
} 

$(function openDiv2() { 

    $("#ombouw_wrap").addClass("Addclass_ombouw_wrap_3block", 1, callback); 
    return false; 
}); 

function callback() { 
    setTimeout(function() { 
     $("#midden").removeClass("Addclass_ombouw_wrap_1block Addclass_ombouw_wrap_2block"); 
    }, 0); 
} 

$(function closeDiv() { 

    $("#ombouw_wrap").addClass("Addclass_ombouw_wrap_1block", 1, callback); 
    return false; 
}); 

function callback() { 
    setTimeout(function() { 
     $("#midden").removeClass("Addclass_ombouw_wrap_2block Addclass_ombouw_wrap_3block"); 
    }, 0); 
} 

window.onload = closeDiv; 

這是我的HTML代碼:

Lengte: <INPUT TYPE="text" NAME="numeric" onKeyup="slide()" id="Getal1" onKeyPress="return checkIt(evt)"> 
x Hoogte: <input type="text" ID="Getal2" onKeyPress="return checkIt(evt)"> 
x Diepte: <input type="text" ID="Getal3" onKeyPress="return checkIt(evt)"> 
</form> 

當你重新加載頁面,你看它是不是開始closedivs,但它與添加類不執行直接啓動if-else語句。

我在這裏做錯了什麼?

+0

你沒有使用括號作爲if if else語句。 –

+0

只是您的代碼的建議。在您的代碼中始終使用英語。像ID =「Getal2」。你應該使用英文,因爲它可能會被某個非荷蘭人使用/編輯(如在這種情況下,在計算器上)。這對代碼更有意義。只是一個荷蘭人的建議,其他:) –

+0

像if(n> = 101 && n <201)openDiv1();或者我需要添加括號? – Lennard

回答

4

當您重新加載頁面時,您會發現它並非以closedivs開頭,而是直接添加類而不執行if-else語句。

這是因爲jQuery對待$(function)作爲$.ready(function)一個方便的形式:通過所述功能對象在頁加載執行

也就是說,$(function openDiv1() {...})定義了一個函數對象,然後傳遞給jQuery在頁面加載時自動執行。相反,從$(...)刪除功能。例如,function openDiv1() {...}就足夠了。 (這也將與不能夠調用openDiv1修正錯誤 - 因爲它是一個函數表達它不會被分配給範圍的變量/屬性。)


以下描述了具有一個問題功能slide

JavaScript做了一些強制;下面解釋了爲什麼else分支將永遠不會達到:

Number("")   // same as Number(0) 
Number("") >= 0 // true 

不過說真的,請不要使用Number(這是一個包裝對象爲number),考慮parseInt(str, 10)作爲替代。作爲額外的獎勵,parseInt("", 10)評估爲NaN(非0),並且因爲NaN >= 0是錯誤的,這將解決最初的問題。

function slide(){ 
    var n = parseInt(document.getElementById('Getal1').value, 10) 
    if (n >= 0 && n <= 100) { 
     $(closeDiv()) 
    } else if (n > 100 && n <= 200) { 
     $(openDiv1()) 
    } else if (n > 200) { 
     $(openDiv2()) 
    } else { 
     alert("You did not enter a number!") 
    } 
} 

還要注意我添加的一致性變化。括號不是必需的,但我發現它以一致的格式良好/格式良好的書寫方式助手。其他要注意的事項是if/else語句的排序以及比較(保持「流動」)。

快樂編碼。

+0

好,如果現在把我的代碼改成了yourse,但它仍然不停留在closediv上,並且把所有的代碼填入div中。 – Lennard

+0

@ user968588還有一個問題,我更新了我的答案。 – 2011-09-30 09:16:42

+0

你是一個天才,現在工作!謝謝! – Lennard

0

我不是一個Javascript程序員,但我相信你在IF/ELSE語句中缺少一些大括號。正確的語法應該是,根據W3

if (condition1){ 
    Handle condition1 
    } 
else if (condition2){ 
    Handle condition2 
    } 
else{ 
    Handle the rest 
    } 

當然,如果不是這種情況,並且不需要括號,那麼我希望有人能夠幫助你:)。

1

你包裝一下你的函數$(),當你試圖確定他們將執行他們...

// alerts 1 
$(function myFunc(){ alert(1) }) 

你需要在你的if/else語句,只是這樣來定義的功能。 ..

// does not execute until called 
function myFunc(){ ... } 
+0

不是我已經這樣做了嗎? – Lennard

+1

你在'$()'中包裝,但你不應該這樣做。問題是:$(function openDiv1(){...})'它沒有定義一個函數,而是執行該函數。你應該按照我的指定來定義你的功能。 –

相關問題