2016-12-25 40 views
0

我對js中的驗證表單有疑問,能否幫助我,因爲我卡住了。我想單獨點擊問題輸入和標籤輸入。但是現在,如果我點擊標籤輸入顯示來自問題輸入的信息(紅色背景上的信息)。我想我的js代碼有問題。javascript中的驗證表單,單獨的點擊輸入

var validateForm = (function() { 
 

 
    var options = {}; 
 
    var classError = 'error'; 
 
    var showFieldValidation = function(input, inputIsValid) { 
 
    if (!inputIsValid) { 
 
     if (!input.parentNode.className || input.parentNode.className.indexOf(options.classError) == -1) { 
 
     input.parentNode.className += ' ' + options.classError 
 
     var d = document.getElementById("de_scri_tit_11") 
 
     d.classList.add("w_te_88") 
 
     $(document).ready(function() { 
 
      $("#de_scri_tit_11").css('display', 'block') 
 

 
     }); 
 
     } 
 
    } else { 
 
     var regError = new RegExp('(\\s|^)' + options.classError + '(\\s|$)'); 
 
     input.parentNode.className = input.parentNode.className.replace(regError, ''); 
 
     var d = document.getElementById("de_scri_tit_11") 
 
     d.classList.remove("w_te_88") 
 
     $(document).ready(function() { 
 
     $("#de_scri_tit_11").css('display', 'none') 
 

 
     }); 
 
    } 
 
    }; 
 

 
    var testInputText = function(input) { 
 
    var fieldHasError = false; 
 
    var mailReg = new RegExp('^[0-9a-zA-Z_.-]', 'gi'); 
 

 
    if (!mailReg.test(input.value)) { 
 
     showFieldValidation(input, false); 
 
     return false; 
 
    } else { 
 
     showFieldValidation(input, true); 
 
     return true; 
 
    } 
 
    }; 
 

 

 

 
    var prepareElements = function() { 
 
    var elements = options.form.getElementsByClassName('til_l67_text'); 
 

 
    [].forEach.call(elements, function(element) { 
 
     element.removeAttribute('required'); 
 
     element.className += ' required'; 
 

 
     if (element.nodeName.toUpperCase() == 'INPUT') { 
 
     var type = element.type.toUpperCase(); 
 

 
     if (type == 'TEXT') { 
 
      element.addEventListener('keyup', function() { 
 
      testInputText(element) 
 
      }); 
 
      element.addEventListener('blur', function() { 
 
      testInputText(element) 
 
      }); 
 
     } 
 

 
     } 
 

 
    }); 
 
    }; 
 

 
    var prepareElementsTag = function() { 
 
    var elements = options.form.getElementsByClassName('as_tags_in_l67'); 
 

 
    [].forEach.call(elements, function(element) { 
 
     element.removeAttribute('required'); 
 
     element.className += ' required'; 
 

 
     if (element.nodeName.toUpperCase() == 'INPUT') { 
 
     var type = element.type.toUpperCase(); 
 

 
     if (type == 'TEXT') { 
 
      element.addEventListener('keyup', function() { 
 
      testInputText(element) 
 
      }); 
 
      element.addEventListener('blur', function() { 
 
      testInputText(element) 
 
      }); 
 
     } 
 

 
     } 
 

 
    }); 
 
    }; 
 

 
    var formSubmit = function() { 
 
    options.form.addEventListener('submit', function(e) { 
 
     e.preventDefault(); 
 

 
     var validated = true; 
 
     var elements = options.form.querySelectorAll('.required'); 
 

 
     [].forEach.call(elements, function(element) { 
 
     if (element.nodeName.toUpperCase() == 'INPUT') { 
 
      var type = element.type.toUpperCase() 
 

 
      if (type == 'TEXT') { 
 
      if (!testInputText(element)) validated = false; 
 
      } 
 

 
     } 
 
     }); 
 

 
     if (validated) { 
 
     this.submit(); 
 
     } else { 
 
     return false; 
 
     } 
 
    }); 
 
    }; 
 

 
    var init = function(_options) { 
 

 
    options = { 
 
     form: _options.form || null, 
 
     classError: _options.classError || 'error' 
 

 
    } 
 
    if (options.form == null || options.form == undefined || options.form.length == 0) { 
 
     console.warn('validateForm: Źle przekazany formularz'); 
 
     return false; 
 
    } 
 
    prepareElements(); 
 
    prepareElementsTag() 
 
    formSubmit(); 
 
    }; 
 

 
    return { 
 
    init: init 
 
    } 
 
})(); 
 

 
document.addEventListener("DOMContentLoaded", function() { 
 
    var form = document.querySelector('.form'); 
 
    validateForm.init({ 
 
    form: form 
 
    }) 
 
});
#de_scri_tit_11 { 
 
    height: 50px; 
 
    font-size: 14px; 
 
    width: 240px; 
 
    position: absolute; 
 
    left: 350px; 
 
    top: 3px; 
 
    color: #fff; 
 
    font-family: Arial; 
 
    display: none; 
 
    background-color: #DB083E; 
 
    border-radius: 8px; 
 
    padding: 5px; 
 
    border: 3px solid #666; 
 
    font-weight: bold; 
 
} 
 
.w_te_88:before { 
 
    content: 'title should have min 15 characters' 
 
} 
 
#de_scri_tag_11 { 
 
    height: 50px; 
 
    font-size: 14px; 
 
    width: 240px; 
 
    position: absolute; 
 
    left: 860px; 
 
    top: 233px; 
 
    color: #fff; 
 
    font-family: Arial; 
 
    display: none; 
 
    background-color: #DB083E; 
 
    border-radius: 8px; 
 
    padding: 5px; 
 
    border: 3px solid #666; 
 
    font-weight: bold; 
 
} 
 
.w_tg_11:before { 
 
    content: 'Tytuł musi mieć minium 15 znaków i maksimum 100 znaków' 
 
} 
 
.form .error input[type=text] { 
 
    color: #DB083E; 
 
    border-color: #DB083E; 
 
    background: #FFEDED url(img/error.png) right center no-repeat; 
 
    background-position: calc(100% - 10px) center; 
 
    box-shadow: 0 0 2px 2px red; 
 
} 
 
#til_bo_x43 { 
 
    width: 370px; 
 
    height: 40px; 
 
    padding-top: 5px; 
 
    position: absolute; 
 
    top: 20px; 
 
    left: 10px; 
 
} 
 
label.til_l67 { 
 
    font-size: 16px; 
 
    font-family: Arial; 
 
    font-weight: bold; 
 
} 
 
input[type=text].til_l67_text { 
 
    margin-left: 19px; 
 
    width: 203px; 
 
    font-size: 16px; 
 
    font-family: Arial; 
 
    height: 30px; 
 
    border: 1px solid #33b2ff; 
 
    padding-left: 5px; 
 
} 
 
input[type=text].til_l67_text:focus { 
 
    outline-style: none; 
 
} 
 
.as_tags_cho99 { 
 
    width: 325px; 
 
    height: 40px; 
 
    padding-top: 5px; 
 
    position: relative; 
 
    top: 70px; 
 
    left: 75px; 
 
} 
 
label.as_tags_lab_l67 { 
 
    font-size: 16px; 
 
    font-family: Arial; 
 
    font-weight: bold; 
 
} 
 
input[type=text].as_tags_in_l67 { 
 
    margin-left: 19px; 
 
    width: 193px; 
 
    font-size: 16px; 
 
    font-family: Arial; 
 
    height: 30px; 
 
    border: 1px solid #33b2ff; 
 
    padding-left: 5px; 
 
} 
 
input[type=text].as_tags_in_l67:focus { 
 
    outline-style: none; 
 
} 
 
.post_ans_976 { 
 
    position: relative; 
 
    left: 170px; 
 
    top: 100px; 
 
    height: 32px; 
 
    width: 150px; 
 
    font-size: 17px; 
 
    background-color: #ff9c33; 
 
    color: #fff; 
 
    font-family: Arial; 
 
    border: none; 
 
    border-radius: 7px; 
 
    margin-bottom: 200px; 
 
} 
 
.post_ans_976:focus { 
 
    background-color: #ff9c33; 
 
} 
 
.post_ans_976:active { 
 
    background-color: #ff4c00; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form class="form"> 
 
    <div class="ask_con_area67"> 
 

 
    <div id="til_bo_x43"> 
 
     <label class="til_l67">Tytuł pytania</label> 
 
     <input class="til_l67_text" type="text" placeholder="Question title" autocomplete="off" required /> 
 
     <div id="de_scri_tit_11"></div> 
 
    </div> 
 

 
    <div class="as_tags_cho99"> 
 
     <label class="as_tags_lab_l67">Tagi</label> 
 
     <input class="as_tags_in_l67" type="text" placeholder="Question tags" required /> 
 
     <div id="de_scri_tag_11"></div> 
 
    </div> 
 
    <button class="post_ans_976">Add question</button> 
 
    </div> 
 
</form>

回答

1

此行爲發生,因爲你已經添加了驗證代碼的模糊事件

element.addEventListener('keyup', function() {testInputText(element)}); 
element.addEventListener('blur', function() {testInputText(element)}); 

將其更改爲重點,以獲得期望的結果。

element.addEventListener('keyup', function() {testInputText(element)}); 
element.addEventListener('focus', function() {testInputText(element)}); 

編輯:按照在評論部分討論

var validateForm = (function() { 
 
\t 
 
    var options = {}; 
 
    var classError = 'error'; 
 
\t 
 

 
\t 
 
    var showFieldValidation = function(input, inputIsValid) { 
 
     if (!inputIsValid) { 
 
      if (!input.parentNode.className || input.parentNode.className.indexOf(options.classError)==-1) { 
 
      input.parentNode.className += ' ' + options.classError 
 
\t \t \t 
 
       
 
      if(input.classList.contains("til_l67_text")) 
 
      { 
 
       var d = document.getElementById("de_scri_tit_11"); 
 
\t \t \t d.classList.add("w_te_title") 
 
       $("#de_scri_tit_11").css('display','block') 
 
      } 
 
      else{ 
 
      var d = document.getElementById("de_scri_tag_11"); 
 
      d.classList.add("w_te_tag"); 
 
      $("#de_scri_tag_11").css('display','block') 
 
      } 
 
\t \t \t 
 
\t \t \t \t 
 
\t \t \t \t \t \t 
 
      } 
 
     } else { 
 
      var regError = new RegExp('(\\s|^)'+options.classError+'(\\s|$)'); 
 
      input.parentNode.className = input.parentNode.className.replace(regError, ''); 
 
      
 
      if(input.classList.contains("til_l67_text")) 
 
      { 
 
\t \t \t  var d = document.getElementById("de_scri_tit_11"); 
 
       d.classList.remove("w_te_title"); 
 
       $("#de_scri_tit_11").css('display','none'); 
 
      } 
 
      else{ 
 
       var d = document.getElementById("de_scri_tag_11"); 
 
       d.classList.remove("w_te_tag"); 
 
       $("#de_scri_tag_11").css('display','none'); 
 
      } 
 
       
 
     } 
 
    }; 
 
\t \t 
 
    var testInputText = function(input) { 
 
     var fieldHasError = false; 
 
     var mailReg = new RegExp('^[0-9a-zA-Z_.-]', 'gi'); 
 
     
 
     if (!mailReg.test(input.value)) { 
 
      showFieldValidation(input, false); 
 
      return false; 
 
     } else { 
 
      showFieldValidation(input, true); 
 
      return true; 
 
     }  
 
    }; 
 
\t 
 
\t 
 
\t \t 
 
    var prepareElements = function() { 
 
     var elements = options.form.getElementsByClassName('til_l67_text'); 
 

 
     [].forEach.call(elements, function(element) { 
 
      element.removeAttribute('required'); 
 
      element.className += ' required'; 
 

 
      if (element.nodeName.toUpperCase() == 'INPUT') { 
 
       var type = element.type.toUpperCase(); 
 

 
       if (type == 'TEXT') { 
 
        
 
        element.addEventListener('blur', function() {testInputText(element)}); 
 
       } 
 
       
 
      } 
 
      
 
     });   
 
    }; 
 
\t 
 
\t var prepareElementsTag = function() { 
 
     var elements = options.form.getElementsByClassName('as_tags_in_l67'); 
 

 
     [].forEach.call(elements, function(element) { 
 
      element.removeAttribute('required'); 
 
      element.className += ' required'; 
 

 
      if (element.nodeName.toUpperCase() == 'INPUT') { 
 
       var type = element.type.toUpperCase(); 
 

 
       if (type == 'TEXT') { 
 
        
 
        element.addEventListener('blur', function() {testInputText(element)}); 
 
       } 
 
       
 
      } 
 
      
 
     });   
 
    }; 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t 
 
var formSubmit = function() { 
 
    options.form.addEventListener('submit', function(e) { 
 
     e.preventDefault(); 
 
    
 
     var validated = true; 
 
    
 
     
 
     var elements = options.form.querySelectorAll('.required'); 
 

 
     
 
     [].forEach.call(elements, function(element) { 
 
      if (element.nodeName.toUpperCase() == 'INPUT') { 
 
       var type = element.type.toUpperCase() 
 
           
 
       if (type == 'TEXT') { 
 
        if (!testInputText(element)) validated = false; 
 
       } 
 
\t \t \t \t 
 
      } 
 
     }); 
 
        
 
     if (validated) { 
 
      this.submit(); 
 
     } else { 
 
      return false; 
 
     } 
 
    });  
 
}; 
 
    \t 
 
    var init = function(_options) { 
 
     
 
     options = { 
 
      form : _options.form || null, 
 
      classError : _options.classError || 'error' 
 
\t \t \t 
 
     } 
 
     if (options.form == null || options.form == undefined || options.form.length==0) { 
 
      console.warn('validateForm: Źle przekazany formularz'); 
 
      return false; 
 
     } 
 
     prepareElements(); 
 
\t \t prepareElementsTag() 
 
\t \t formSubmit(); 
 
\t }; 
 

 
    return { 
 
     init : init 
 
    } 
 
})(); 
 

 
document.addEventListener("DOMContentLoaded", function() { 
 
    var form = document.querySelector('.form'); 
 
    validateForm.init({form : form}) 
 
});
#de_scri_tit_11 
 
{ 
 
\t height: 30px; 
 
\t font-size:14px; 
 
\t width:240px; 
 
\t position:absolute; 
 
\t left:350px; 
 
\t top:3px; 
 
\t color:#fff; 
 
\t font-family:Arial; 
 
\t display:none; 
 
\t background-color:#DB083E; 
 
\t border-radius:8px; 
 
\t padding:5px; 
 
\t border:3px solid #666; 
 
\t font-weight:bold; 
 
} 
 
.w_te_title:before 
 
{ 
 
\t content:'Title should have min 15 characters' 
 
} 
 
.w_te_tag:before 
 
{ 
 
\t content:'Tag should have min 15 characters' 
 
} 
 
#de_scri_tag_11 
 
{ 
 
\t height: 30px; 
 
    position: relative; 
 
    font-size: 14px; 
 
    width: 240px; 
 
    left: 275px; 
 
    top: -36px; 
 
    color: #fff; 
 
    font-family: Arial; 
 
    display: none; 
 
    background-color: #DB083E; 
 
    border-radius: 8px; 
 
    padding: 5px; 
 
    border: 3px solid #666; 
 
    font-weight: bold; 
 
} 
 
.w_tg_11:before 
 
{ 
 
\t content:'Tytuł musi mieć minium 15 znaków i maksimum 100 znaków' 
 
} 
 
.form .error input[type=text]{ 
 
    color: #DB083E; 
 
    border-color: #DB083E; 
 
    background: #FFEDED url(img/error.png) right center no-repeat; 
 
    background-position: calc(100% - 10px) center; 
 
\t box-shadow: 0 0 2px 2px red; \t 
 
    } 
 

 
#til_bo_x43 
 
{ 
 
\t width:370px; 
 
\t height:40px; 
 
\t padding-top:5px; 
 
\t position:absolute; 
 
\t top:20px; 
 
\t left:10px; 
 

 
} 
 
label.til_l67 
 
{ 
 
\t font-size:16px; 
 
\t font-family:Arial; 
 
\t font-weight:bold; 
 
} 
 
input[type=text].til_l67_text 
 
{ 
 
\t margin-left:19px; 
 
\t width:203px; 
 
\t font-size:16px; 
 
\t font-family:Arial; 
 
\t height:30px; 
 
\t border:1px solid #33b2ff; 
 
\t padding-left:5px; 
 
} 
 
input[type=text].til_l67_text:focus 
 
{ 
 
\t outline-style:none; 
 
} 
 

 
.as_tags_cho99 
 
{ 
 
\t width:325px; 
 
\t height:40px; 
 
\t padding-top:5px; 
 
\t position:relative; 
 
\t top:70px; 
 
\t left:75px; 
 

 
} 
 
label.as_tags_lab_l67 
 
{ 
 
\t font-size:16px; 
 
\t font-family:Arial; 
 
\t font-weight:bold; 
 
} 
 
input[type=text].as_tags_in_l67 
 
{ 
 
\t margin-left:19px; 
 
\t width:193px; 
 
\t font-size:16px; 
 
\t font-family:Arial; 
 
\t height:30px; 
 
\t border:1px solid #33b2ff; 
 
\t padding-left:5px; 
 
} 
 
input[type=text].as_tags_in_l67:focus 
 
{ 
 
\t outline-style:none; 
 
} 
 
.post_ans_976 
 
{ 
 
\t position:relative; 
 
\t left:170px; 
 
\t top:100px; 
 
\t height:32px; 
 
\t width:150px; 
 
\t font-size:17px; 
 
\t background-color:#ff9c33; 
 
\t color:#fff; 
 
\t font-family:Arial; 
 
\t border:none; 
 
\t border-radius:7px; 
 
\t margin-bottom:200px; 
 
} 
 
.post_ans_976:focus 
 
{ 
 
\t background-color:#ff9c33; 
 
} 
 
.post_ans_976:active 
 
{ 
 
\t background-color:#ff4c00; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form class="form"> 
 
\t <div class="ask_con_area67"> 
 
\t \t 
 
\t \t <div id="til_bo_x43"> 
 
\t \t \t <label class="til_l67">Tytuł pytania</label> 
 
\t \t \t <input class="til_l67_text" type="text" placeholder="Question title" autocomplete="off" required /> 
 
\t \t \t <div id="de_scri_tit_11"></div> 
 
\t \t </div> 
 
\t \t \t \t 
 
\t \t <div class="as_tags_cho99"> 
 
\t \t \t <label class="as_tags_lab_l67">Tagi</label> 
 
\t \t \t <input class="as_tags_in_l67" type="text" placeholder="Question tags" required /> 
 
\t \t \t <div id="de_scri_tag_11"></div> 
 
\t \t </div> 
 
\t <button class="post_ans_976">Add question</button> \t 
 
\t </div> 
 
\t 
 
\t 
 
\t </form>

+0

感謝,但看當點擊問題輸入添加.w_te_88類內容的CSS樣式,我想這樣做點擊標籤輸入時也是如此,但不能處理區分點擊問題輸入和標籤輸入點擊 –

+0

@VR更新了此代碼。 – Deep

+0

很多,對我來說這是一個很大的進步,但爲什麼無效輸入是當我注重輸入,沒有當我模糊? –