动态验证 - 只有一个追加

问题描述:

我试图快速验证它并在弹出框中显示它#result,但是 我不能只添加我的项目一次。我试过e.preventDefault();e.stopPropagation(); - 两者都不起作用。 .html不是解决方案,因为我不想在div中放置两个(或更多)段落。如何停止他们?动态验证 - 只有一个追加

Working example

我的html代码:

HTML:

<form name="form" id="form" method="post"> 
<span> Write pwd: </span> 
<input id="login" name="login" type="text" /> 
</form> 
<div id="result" class="tooltip"></div> 

和JavaScript:

$(document).ready(function() { 

    $('#login').keyup(function() { 
    var th = document.getElementById('login').value; 
     if (th.length < 6){ 
      $('#result').css('display','inline'); 
      $('#result').append('<p id="too_short">Too short password.</p>'); 
     } else{ 
     $("#too_short").remove(); 
     } 

     if (th.contains('\'') || th.contains('\"') || th.contains('\\') || th.contains('\/')){ 
      $('#result').css('display','inline'); 
      $('#result').append('<p id="forb_char">Forbidden characters</p>'); 
     } else{ 
      $("#forb_char").remove(); 
     } 

    }); 
}); 
+0

我不知道如果我得到你的问题,是[这](http://jsfiddle.net/qwux7o9r/1/)你想实现什么? – 2014-11-02 21:59:15

+0

@Valerio当试图移除警告时,如果它们不存在,这不会引发错误吗? – nicael 2014-11-02 22:04:39

+0

@nicael你说得对,我认为将静态HTML中的所有空白div填充然后用html()和empty()方法填充它们并清空它们会更好 – 2014-11-02 22:09:04

固定的,试试吧http://jsfiddle.net/amostk/9n2db67u/17/

$(document).ready(function() { 

$('#login').keyup(function() { 
var th = document.getElementById('login').value; 
    if (th.length < 6){ 
     $('#result').css('display','inline'); 
//add a variable to check if #too_sort exist 
     var ex = $("#too_short").text(); 
//if it exists, do not append again else add 
     if(!ex) 
     { 
      $('#result').append('<p id="too_short">Too short password.</p>'); 
//remove #forb_char if exists 
      $("#forb_char").remove(); 
     } 
    } else{ 
     $("#too_short").remove(); 
    } 

    if (th.contains('\'') || th.contains('\"') || th.contains('\\') || th.contains('\/')){ 
     $('#result').css('display','inline'); 
    //add a varible to check if "#forb_char exists 

     var en = $("#forb_char").text(); 
    // if exists do not add else add 
     if(!en) 
     { 
     $('#result').append('<p id="forb_char">Forbidden characters</p>'); 
//remove all #too_short for only one validation 
      $("#too_short").remove(); 
     } 
    } else{ 
     $("#forb_char").remove(); 
    } 

}); 
}); 
+0

谢谢,这很完美,我刚刚评论了内部的其他人。 – user3692826 2014-11-03 06:53:59

+0

不客气。 – 2014-11-03 08:56:51

检查,如果你已经添加使用indexOf()你的警告:

if($('#result').text().indexOf("Too short password.")==-1){ 
    if (th.length < 6){ 
     $('#result').css('display','inline'); 
     $('#result').append('<p id="too_short">Too short password.</p>'); 
    } 
}else{ 
    $("#too_short").remove(); 
} 

if($('#result').text().indexOf("Forbidden characters")==-1){ 
    if (th.contains('\'') || th.contains('\"') || th.contains('\\') || th.contains('\/')){ 
     $('#result').css('display','inline'); 
     $('#result').append('<p id="forb_char">Forbidden characters</p>'); 
    } 
}else{ 
    $("#forb_char").remove(); 
} 
+0

Inner if/else将仅用于一次,因为我们检查是否存在某些文本。如果不存在,做一些工作,否则什么都不做。我们可以搬出去,但谢谢你的回答。 – user3692826 2014-11-03 07:04:15

  • 嗯,这不是那么清楚,你在你的问题需要什么,但是这是我从我理解的那样。

  • 我实施了这个有点清洁,并修复了行为(我希望这是你所需要的)

  • 只是为了添加一些东西。如果您需要在未来更复杂的验证或减少的代码行试试下面的插件,它是真正有用的,易于使用:http://jqueryvalidation.org/

  • 现场演示:http://jsfiddle.net/nwu3ojft/


HTML:

<form name="form" id="form" method="POST"> 
    <span>Write pwd: </span> 
    <input id="login" name="login" type="text" /> 
</form> 
<div id="result" class="tooltip"></div> 

CSS:

指定从第一次所需的display财产,无需验证口令时,每次添加它。

div.#result { 
    display: inline; 
} 

的jQuery:

请阅读代码中的注释。

// Available error messages 
var errorMessage = { 
    tooShort: 'Too short password', 
    forbChar: 'Forbidden characters' 
}; 

$(function() { 

    var login = $('#login'); 

    login.on('keyup', function(e) { 
     var pwd = this.value, 
      isValid = isValidPwd(pwd, true); 

     if (isValid) { 
      // Clear error message 
      setMsg(''); 
     } 
    }); 

}); 

/** 
* Check if password input is valid 
* 
* @param {String} value To be checked 
* @param {Boolean} showErrors Flag to display errors or not 
* @returns {Boolean} isValid 
*/ 
function isValidPwd(value, showErrors) { 
    var isValid = true, 
     error; 

    // Rule #1 
    if (value && value.length < 6) { 
     error = '<p>' + errorMessage.tooShort + '</p>'; 
     isValid = false; 
    } 

    // Rule #2 
    if (value && (value.indexOf('\'') >= 0 || 
       value.indexOf('\"') >= 0 || 
       value.indexOf('\\') >= 0 || 
       value.indexOf('\/') >= 0)) { 
     error = '<p>' + errorMessage.forbChar + '</p>'; 
     isValid = false; 
    } 

    // Check flag 
    if (showErrors) { 
     setMsg(error); 
    } 

    return isValid; 
}; 

/** 
* Used to set a message in the UI 
*/ 
function setMsg(value) { 
    $('#result').html(value); 
}; 
+1

非常好,谢谢。我需要在一次或更多时间显示这两个消息,但没关系。 – user3692826 2014-11-03 07:07:07