2011-08-18 22 views
3

編輯:如何停止isNaN返回空白字段的錯誤?

好的,所以我正在更新這個問題,以顯示我已經建立的,因爲我還沒有能夠解決這個問題。這是我得到的圖像。因此,大家可以看到,

enter image description here

當用戶輸入一個值,計算(它們只是個,總計算完成「的onkeyup」。正如你所看到的,因爲這一點,他們回到「南」 。有沒有辦法讓我停止顯示NaN的字段,然後只顯示總數值?

我想過這個,只要有東西輸入進去,我就可以得到所有的字段來計算最後一個字段?你怎麼看?向所有那些已經很好地回答了我的問題的人道歉,我仍然試圖找出最好的方法,我對JavaScript的使用不如我使用H TML/CSS!

+0

什麼是'sInput','dInput'和'pInput'?顯示如何爲這些變量賦值。 –

+0

爲什麼不直接將輸入讀入變量,如果爲空,則將其設置爲零? – Ali

+0

對不起,這些輸入是用戶輸入的輸入,它們是從表單中提取的。我將編輯帖子以包含它們。 – zik

回答

1

你應該嘗試寫一個checkNumber函數,它接受輸入的值作爲參數(而不是直接引用到函數內的每個字段)。例如:

var checkNumber = function (testval) { 
    if (isNaN(testval)) { 
    alert('Bad!'); 
    // clean up field? highlight in red? etc. 
    } else { 
    // call your calculation function 
    } 
} 

然後將該函數綁定到每個表單字段的keyup事件。有很多方法可以做到這一點。看看addEventListener(),或者像jQuery這樣的框架的綁定功能(例如,.delegate().keyup())。

請注意,如果您將函數綁定到事件,則不必顯式傳遞值參數。您應該可以通過this.value在該功能內使用字段值。所以,你有這樣的事情:

var checkNumber = function() { 
    if (isNaN(this.value)) { 
    alert('Bad!'); 
    // clean up field? highlight in red? etc. 
    } else { 
    // call your calculation function 
    } 
} 

然後(用天真的結合方法,通過ID):

document.getElementById('id_of_a_field').addEventListener('keyup', checkNumber, true); 
+0

謝謝,我會試試這個! – zik

0

難道你不能只用默認值初始化文本框,比如說0?

+0

我確實嘗試過,但我需要將該字段留空(這是一項要求)。我沒有設置文本框的值默認爲'0',但被告知他們需要開始空白! – zik

0

如何使用short-circuit evaluationjsFiddle example

編輯parseFloat:

function checkNumber() 
{ 
    var sInput = parseFloat(document.getElementById('sInput').value || 0); 
    var dInput = parseFloat(document.getElementById('dInput').value || 0); 
    var pInput = parseFloat(document.getElementById('pInput').value || 0); 
    if (isNaN(sInput) || isNaN(dInput) || isNaN(pInput)) { 
     alert("You entered an invalid character. Please press 'Reset' and enter a number."); 
    } 
} 

所以,如果pInput是不確定的只是使用0,但如果輸入有值,那麼使用該值。

邊注:白色的空間實際上是一個數字,+' '; // 0

+0

謝謝!我仍在玩這個試圖讓它工作,但感謝您的幫助。 – zik

+0

'isNaN(x || 0)'對於'x'的任何值都不是真的,所以這只是關閉警報。如果'isNaN(x)'爲真,那麼'x'就是falsey,所以'0'被傳遞給'isNaN',而'isNaN(0)'爲'false'。 –

+0

@Mike,你錯了,'isNaN(「aa」|| 0)// true',這是我製作的工作演示:http://jsfiddle.net/quYSD/ – Joe

0

你爲什麼不使用3個不同的功能或參數,以確定其中輸入的用戶逼人?如果每個輸入都調用checkNumber(1),checkNumber(2)和checkNumber(3),則只能驗證用戶正在使用的輸入,而不是同時驗證全部3個輸入。

或者您可以使用輸入驗證和代替警報只是返回false以防止用戶輸入查詢無效字符

+0

是真的,我可以做到這一點,但我想保持它在一個功能。我正在檢查所有選項,並會看到哪個是最好的選擇! – zik

+0

就像我說的,你也可以使用1個功能與一個參數 – JSantos

+0

好爽謝謝:) – zik