2014-04-05 56 views
-3

我做了一个jQuery验证脚本来验证我的html中的两个input元素。jQuery验证脚本更正

$(function() { 
 
    function requiredValidation(txt) { 
 
    txt = $(txt); 
 
    var errorblock = '<span class="error-message">Please enter a valid input</span>'; 
 
    var isValid = true; 
 
    if (jQuery.trim(txt.val()) == '' || jQuery.trim(txt.val()) == txt[0].defaultValue ||  jQuery.trim(txt.val()) == txt.attr('title')) { 
 
     isValid = false; 
 
     txt.addClass("error"); 
 
     txt.parent().append(errorblock); 
 
     txt.val(txt.attr('title')); 
 
    } else { 
 
     txt.removeClass("error"); 
 
     txt.parent().remove(errorblock); 
 
    } 
 
    return isValid; 
 
    } 
 

 
    $(".newBtn").click(function (e) { 
 
    e.preventDefault(); 
 
    if (!requiredValidation(".rqvalidate")) { 
 
     $(".rqvalidate").focus(); 
 
     return; 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p><input type="text" value="aks" class="rqvalidate"/></p> <p> 
 
<input type="text" value="[email protected]" class="emailfield rqvalidate"/></p> 
 
<input type="submit" name="Button1" value="Gem ændringer" class="newBtn"/>

这个脚本适用于单一的元素,但如果有两个input元素,验证脚本都将清除input的价值。

这个问题的正确解决方案是什么?

注:我可以按类仅验证这些元素。使用元素的ID是我的问题,因为这些HTML是动态生成

jsFiddle

+0

http://jqueryvalidation.org/ – lifetimes

+0

你的问题不明确。预期的行为是什么?如果有5个输入具有相同的类别,请点击该按钮,根据您决定哪些输入进行验证? –

+0

@TilwinJoy我不想验证所有获得“rqvalidate”输入的输入 – Athul

回答

3

在你的代码中,txt是一个包含一组匹配元素的jQuery对象。您需要迭代它并逐个检查每个元素,并在元素未通过验证时中断循环。

您可以使用each()函数遍历该对象并返回false以打破循环。

在本JSFiddle

更新:

下面的代码

txt.parent().remove(errorblock); 

将无法​​工作,因为字符串errorblock是不是一个有效的选择。

根据jQuery APIremove()方法接受一个字符串作为参数,它是一个有效的选择...

Updted小提琴JSFiddle

+0

JSFiddle解决方案中存在一些错误,在每次验证之后,它会将值重置为旧值 – Athul

+0

验证成功时不会删除错误消息 – Athul

+0

@Athul Myy lappy已经关闭,我现在会更新提琴。 –

1

既然你是有同一类的元素你会得到验证功能在txt元素的数组。

因此,使用for loop$.each进行迭代。

然后它将只显示消息给具有错误值的元素。