2014-04-18 162 views
-1

我想在某些輸入內的值爲空時另一個元素爲空時向元素添加一個類。Javascript函數IF聲明不起作用

由於某種原因,它只是登陸else語句,我以爲我使用正確的語法來發送多個參數,但也許我錯了。

任何想法?

var btnElementRegistro = document.getElementById('btnGuardar'); 
    btnElementRegistro.addEventListener('click' , validar); 

function validar(){ 

var elementNombre = document.getElementById('txtNombre'), 
    elementApellido1 = document.getElementById('txtApellido1'), 
    elementCel = document.getElementById('numCelular'); 


    addClass(txtNombre,txtApellido1,numCelular); 


} 

function addClass(pName, pApellido, pCel){ 

if(pName.value === '' && pApellido === '' && pCel ===''){ 

    pName.className = "error"; 
    pApellido.className = "error"; 
    pCel.className = "error"; 

}else{ 
    pName.className = "noError"; 
    pApellido.className = "noError"; 
    pCel.className = "noError"; 


    } 

} 

在此先感謝。

編輯:我想要使用if/else,以便我可以調用另一個函數來顯示一個div(PopUp)時添加.noError。

var elementoVerInfo = document.getElementById('btnGuardar'), 
elementoBotonCerrar = document.getElementById('btnCerrar'); 

elementoVerInfo.addEventListener('click', function() { 
displayPopUp('popUpCorrecto2'); 
}); 

elementoBotonCerrar.addEventListener('click', function() { 
hidePopUp('popUpCorrecto2'); 
}); 

function displayPopUp(pIdDivToShow){ 
var fElementDivToShow = document.getElementById(pIdDivToShow), 
newClass =''; 
newClass = fElementDivToShow.className.replace('hide',''); 
fElementDivToShow.className = newClass + ' show'; 
} 

function hidePopUp(pIdDivToShow){ 
var fElementDivToShow = document.getElementById(pIdDivToShow), 
newClass =''; 
newClass = fElementDivToShow.className.replace('show',''); 
fElementDivToShow.className = newClass + ' hide'; 
} 
+2

你應該傳遞變量名字 - 'addClass(elementNombre,elementApellido1,elementCel);'等等,而不是ID的的這些變量('txtNombre','txtApellido1'和'numCelular')。 – lifetimes

+0

您只檢查其中一個變量的值... if(pName.value ===''&& pApellido ===''&& pCel ==='') –

+0

當您調試應用程序時,是參數定義?我猜測其中一個或全部都是未定義的,並且使你的平等陳述是錯誤的。 – VtoCorleone

回答

1

我想你想是這樣的:

function validar(){ 

    var elementNombre = document.getElementById('txtNombre'), 
     elementApellido1 = document.getElementById('txtApellido1'), 
     elementCel = document.getElementById('numCelular'); 

    /*call it using the variables not the string identifiers.*/ 
    addClass(elementNombre, elementApellido1, elementCel); 
    /*addClass(txtNombre,txtApellido1,numCelular);*/ /* wrong */   
} 

function addClass(pName, pApellido, pCel){ 
    pName.className = pName.value === '' ? 'error' : 'noError'; 
    pApellido.className = pApellido.value === '' ? 'error' : 'noError'; 
    pCel.className = pCel.value === '' ? 'error' : 'noError'; 
} 

編輯回答在評論問題

一旦noError爲,我可以在哪裏添加對PopUp函數的調用補充?

如果你想添加一個函數調用,那麼你必須使用if,因爲?只允許單個語句。或者你可以如下做到這一點:

function addClass(pName, pApellido, pCel){ 
    pName.className = pName.value === '' ? 'error' : 'noError'; 
    pApellido.className = pApellido.value === '' ? 'error' : 'noError'; 
    pCel.className = pCel.value === '' ? 'error' : 'noError'; 

    if (pName.className === 'noError' && 
     pApellido.className === 'noError' && 
     pCel.className === 'noError'){ 
     callFunction(); /* call here the function you want */ 
    } 
} 

以上是一般的方法,因爲我完全不知道,如果你想打電話給每個輸入或只有一次的功能。如果你的目的是要求每個輸入的功能,那麼你可以做這樣的:

function addClass(pName, pApellido, pCel){ 
    if (pName.value === ''){ 
     pName.className = 'error'; 
    } 
    else{ 
     pName.className = 'noError'; 
     displayPopUp(pName.id); 
    } 

    if (pApellido.value === ''){ 
     pApellido.className = 'error'; 
    } 
    else{ 
     pApellido.className = 'noError'; 
     displayPopUp(pApellido.id); 
    } 

    if (pCel.value === ''){ 
     pCel.className = 'error'; 
    } 
    else{ 
     pCel.className = 'noError'; 
     displayPopUp(pCel.id); 
    } 

} 
+0

工作就像一個魅力,謝謝!進一步的參考是什麼?呢? –

+0

我正在使用if/else,因爲一旦添加了類noError,我想使用添加到編輯中的代碼打開PopUp。在刪除代碼時,一旦添加noError,我可以在哪裏添加對PopUp函數的調用? –

+0

@CodeGrasshopper這是'if-then-else'的快捷方式。 '?'之前的部分是條件,在'?'後面是'後面'分支,後面是':''else'分支。 – agarwaen

1

這是問題:

var elementNombre = document.getElementById('txtNombre'), 
elementApellido1 = document.getElementById('txtApellido1'), 
elementCel = document.getElementById('numCelular'); 

addClass(txtNombre,txtApellido1,numCelular); 

txtNombretxtApellido1numCelular是元素的ID,而不是變量名。

你應該通過你定義的變量名:

addClass(elementNombre, elementApellido1, elementCel); 
+0

謝謝!我看到我在那裏犯了一個錯誤,但它不起作用。它仍然添加noError類。 –

+1

@CodeGrasshopper你確定輸入元素是完全空的(你有沒有嘗試console.logging他們)?你能否給我一個快速的jsFiddle來表明這個問題? – lifetimes

+0

我設法使用agarwean的解決方案修補它。認爲它讓我感到困惑,爲什麼你的代碼看起來不應該工作。如果你想要,我仍然可以從這一個小提琴。 –