2013-09-09 3 views
0

У меня есть два оператора if/else, сравнивающих одну и ту же переменную, с одной функцией. Я не желаю и не вижу причин для гнездования заявлений.Только один оператор if else, выполняющий

function checkUser() { 
    var user = document.getElementById('usern').value; 
    var element = document.getElementById('labelUser'); 

    if (user.length < 3 || user.length > 15) { 
    element.innerHTML = "Invalid length."; 
    element.style.color = "red"; 

    } 
    else { 
    element.innerHTML = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 
    } 

    if (user.match(/[\<\>[email protected]#\$%^&\*,]+/i)){ 
    element.innerHTML = "Invalid characters."; 
    element.style.color = "red"; 

    } 
    else { 
    element.innerHTML = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 
    }  

} 

Как можно улучшить этот код?

+2

ммм это оленья кожа действительно, здесь лучше перевести его на обзор кода - codereview.stackexchange.com –

+2

Должно быть перенесено в codereview –

ответ

0
function checkUser() { 
    var user = document.getElementById('usern').value; 
    var element = document.getElementById('labelUser'); 

    if (user.length < 3 || user.length > 15) { 
    element.innerHTML = "Invalid length."; 
    element.style.color = "red"; 

    } 
    else if (user.match(/[\<\>[email protected]#\$%^&\*,]+/i)){ 
    element.innerHTML = "Invalid characters."; 
    element.style.color = "red"; 

    } 
    else { 
    element.innerHTML = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 
    }  
} 
+0

Он отлично поработал, спасибо. Полагаю, что в первый раз, когда я поставил «else if», чтобы увидеть, будет ли это работать, я должен был сделать что-то еще неправильно в сценарии в то время. Спасибо, что нашли время. – Clarisse

+0

Вы понимаете, что пропускаете слой проверки ошибок, используя else, если там, правильно? – probablyup

0

Вы можете минимизировать такой код:

var gotoElse = false; 
    if (user.length < 3 || user.length > 15) { 
    element.innerHTML = "Invalid length."; 
    element.style.color = "red"; 

    } 
    else gotoElse = true; 

    if (user.match(/[\<\>[email protected]#\$%^&\*,]+/i)){ 
    element.innerHTML = "Invalid characters."; 
    element.style.color = "red"; 

    } 
    else gotoElse = true; 

    if(gotoElse) { 
    element.innerHTML = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 
    }  
+0

, что является фантастическим, спасибо! – Clarisse

0

Использование else if:

if (user.length < 3 || user.length > 15) { 
    element.innerHTML = "Invalid length."; 
    element.style.color = "red"; 

    } 
    else if (user.match(/[\<\>[email protected]#\$%^&\*,]+/i)){ 
    element.innerHTML = "Invalid characters."; 
    element.style.color = "red"; 
    } 
    else { 
    element.innerHTML = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 
    } 
0

Вот короткий способ его написания.

var valid = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 

element.innerHTML = user.length < 3 || user.length > 15 ? "Invalid length." : valid; 
element.innerHTML = user.match(/[\<\>[email protected]#\$%^&\*,]+/i) ? "Invalid characters." : valid; 

if(element.innerHTML !== valid){ 
    element.style.color = "red"; 
} 
0

Я бы повернул проблему вокруг ... сначала назначил значения по умолчанию переменной и перезаписал только при необходимости. Затем используйте эти переменные для назначения элементу в конце.

function checkUser() { 
    var user = document.getElementById('usern').value; 
    var element = document.getElementById('labelUser'); 
    var outputHTML = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 
    var color = ''; 

    if (user.length < 3 || user.length > 15) { 
    outputHTML = "Invalid length."; 
    color = "red"; 
    } 

    if (user.match(/[\<\>[email protected]#\$%^&\*,]+/i)){ 
    outputHTML = "Invalid characters."; 
    color = "red"; 
    } 

    element.innerHTML = outputHTML; 
    element.style.color = color; 
} 
+0

Мне это нравится. Благодаря!! – Clarisse

0

Это поможет вам очень хороший выход, который будет отображаться как ошибки, если они оба присутствуют

function checkUser() { 
    var user = document.getElementById('usern').value; 
    var element = document.getElementById('labelUser'); 
    var errorMsg = []; 

    if (user.length < 3 || user.length > 15) { 
    errorMsg.push("Invalid length"); 
    } 

    if (user.match(/[\<\>[email protected]#\$%^&\*\s,]+/i)){ 
    errorMsg.push("Invalid characters"); 
    } 

    if (errorMsg.length) { 
    element.innerHTML = errorMsg.join(","); 
    element.style.color = "red"; 
    } else { 
    element.innerHTML = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 
    } 
} 

вы можете найти запущенный образец здесь, http://jsfiddle.net/LR9u3/

+0

Я немного обновил его, чтобы устранить переменную и устранить пробелы, так как вы обычно не видите их в именах пользователей, http://jsfiddle.net/LR9u3/1/ – tomoguisuru

0
function checkUser() { 
    var user = document.getElementById('usern').value, 
     element = document.getElementById('labelUser'), 
     err = [], 
     html, color; 

    if (user.length < 3 || user.length > 15) { 
     err.push('Invalid length'); 
    } 
    if (user.match(/[\<\>[email protected]#\$%^&\*,]+/i)) { 
     err.push('Invalid characters'); 
    } 
    if (err.length) { 
     color = 'red'; 
     html = err.join('<br />'); 
    } else { 
     html = '<img src="http://www.zrfunding.com/wp-content/uploads/2013/05/CheckMarkSmallGreen.jpg" alt="Valid" height="35" width="30"/>'; 
    } 
    element.style.color = color || ''; 
    element.innerHTML = html; 
}