我有一个关于JQuery最小-最大验证在动态创建的输入项中循环的问题。在我的php页面中,我有一个动态表,它循环遍历数据库中的数据。有时我有一个有3个输入项(单元格)的表,有时有6或12个输入项。使用jquery,我发现它可以验证数据的最小-最大值,但它只适用于第一个输入项。如何循环遍历所有输入项以获得相同的最小-最大验证?
这里的JQuery代码:
$(document).ready(function(){
$("input").click(function(){
var enteredValue = $("input:#value_one").val();
var min=1;
var max = 3;
var num = parseInt(enteredValue);
if (min > num || max < num) {
alert('Number ' + num + ' is not a number between ' + min + ' and ' + max);
return false;
}
});
});
这里除了PHP HTML代码:
foreach($datas as $idactivite=>$dat){
$totalactiv=0;
$nbdiviseur=0;
foreach($dat as $dd){
$totalactiv+=$dd["note"];
$nbdiviseur++;
}
$mamoyactiv=$totalactiv/$nbdiviseur;
$position=3;
$mamoyactiv = substr($mamoyactiv, 0, $position);
$moyenneverticale[$idactivite]=$mamoyactiv;
// Here the input Item who loops through the DB Query to get them values:
$htmldroit.="<td id='myguaNote' bgcolor='$bgcolor' align='center'>
<input name='".$idactivite."_".$idagent."' id='value_one' maxlength='1' class='grand' value='".$dat[$idagent]["note"]."' ></td>";
$totalfamille+=$dat[$idagent]["note"];
$TabRes[$ind] += $dat[$idagent]["note"];
$TabObj[$ind] = " ";
$TabResColor[$ind]=0;
$ind++;
}
有人有什么想法吗?
THX提前
我认为您并没有真正选择实际单击的输入字段。
用替换var enteredValue = $("input:#value_one").val()
var enteredValue = $(this).val();
来自click
的回调函数在this
关键字中保存对单击的DOM元素的引用。将其封装在$()
中,使其成为jQuery对象,并最终对其调用val()
。
Fiddle
编辑:为了验证按钮单击上的多个输入字段,我使用了一个助手类validate
。假设你想要验证的所有输入字段都有这个类,你可以在点击时绑定一些代码来提交按钮:
$("#submitButton").click(function(){
$(".validate").each(validateField);
});
首先,所有具有类validate
的元素都将被选中,在这个集合中,我们调用jQuery的each(),它将函数句柄作为参数。这个函数(在本例中为validateField
)应该用于输入参数(索引和元素,请参阅文档以了解更多详细信息-如果你认为"for in"循环中有一个奇怪的for,那你就不远了。)我在这个函数中移动了您的验证代码,并简单地用$(element)
替换了$(this)
Fiddle
几个提示
如果您使用的是动态数据,那么不要使用简单的"点击"功能,而是尝试.on(使用jQuery1.7+)
$('document').on('click', 'input', function(){
var enteredValue = $(this).val();
//your rest of code
});
试试这个
//================在数组中查找最小值的原型================
Array.prototype.min = function()
{
return Math.min.apply(null, this)
}
//=============Jquery脚本====================================
$selector=$("input"); //Your selector which is cursoring your inputs
$aryVal=new Array; //Define an Array
$selector.each(function() //Iterate to all the input
{
$aryVal.push(this.value); //push the value to array
});
var min = Math.min.apply(null, $aryVal); //Getting min value from array
alert(min);
听起来你可能在寻找.on(),它会随着页面的变化而保持最新状态,而你所点击的只是页面创建时的状态。尝试:
$("input").on("click",function(){
||如果(min>num||max<num){
更改为
// For a number not between min and max
if (num < min || num > max) {
// For a number between min and max
if (num >= min && num <= max) {
用于测试:
<script>
function test(){
$html = document.getElementById("msg");
num = 100;
min = 10;
max = 100;
if (num < min || num > max) {
$html.innerHTML = "Num is not between min and max";
return;
}
if (num >= min && num <= max) {
$html.innerHTML = "Num is between min and max";
return;
}
}
</script>
<body onload="test()">
<div id="msg" style="border:1px solid #000000; height:100px">Answer has not been found!</div>
</body>
创建用于在某个地方注入变量的动态元素量时的良好做法是:
- 提供唯一的ID以进行识别
- 使用CSS类。类样式是指重复的,ID则不是
因此,如果我要生成1到100个的输入
for ($i = 1; $i <= 100; $i++)
{
$IdAndName = "input" . $i;
echo("<input type='text' id='" . $IdAndName . "' name='" . $IdAndName . "' class='myStyle'/><br>'n");
}
现在您将拥有ID为input1到input100的HTML元素
然后,您可以使用JQuery单击事件,然后使用$(this).val()在单击时检索它的值。