1

我有一个关于 JQuery Min Max Validation 循环通过动态创建的输入项的问题。在我的 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] = "&nbsp;";
        $TabResColor[$ind]=0;

        $ind++;
    }

有人有什么想法吗?

提前 THX

4

6 回答 6

0

我认为您并没有真正选择实际单击的输入字段。

替换var enteredValue = $("input:#value_one").val()

 var enteredValue = $(this).val();

回调函数 from保存对关键字click中单击的 DOM 元素的引用。this将其包装$()成一个 jQuery 对象,最后调用val()它。

小提琴

编辑: 要验证按钮单击时的多个输入字段,我使用了帮助程序类validate。假设您要验证的所有输入字段都具有此类,您可以绑定一些代码以在单击时提交按钮:

$("#submitButton").click(function(){
    $(".validate").each(validateField);
});

validate首先将选择所有具有该类的元素,在这个集合中,我们调用 jQuery 的each(),它接受一个函数句柄作为参数。这个函数(validateField在这种情况下)应该接受输入参数(索引和元素,有关更多详细信息,请参阅文档 - 如果您认为“for in”循环有一个奇怪的 for ,那么您并不遥远。)。
我在此函数中移动了您的验证代码,并简单地替换$(this)$(element)

小提琴

于 2012-09-04T09:12:44.217 回答
0

一些提示

如果您正在处理动态数据,则不要使用简单的“点击”功能,而是尝试.on(使用 jQuery 1.7+

 $('document').on('click', 'input', function(){

   var enteredValue = $(this).val();
   //your rest of code
});
于 2012-09-04T09:13:27.360 回答
0

|| if (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>
于 2012-09-04T09:14:52.277 回答
0

听起来您可能正在寻找.on(),它会随着页面的变化保持最新状态,而您的点击只是页面创建时的状态。尝试:

$("input").on("click",function(){
于 2012-09-04T09:15:11.307 回答
0

试试这个

//========== 找出数组中最小值的原型========================

        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);
于 2012-09-04T09:20:38.000 回答
0

创建用于在某处注入变量的动态元素数量时的良好做法是:

  1. 提供唯一 ID 用于识别。
  2. 使用 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 click 事件,然后使用 $(this).val() 来检索它的点击值。

于 2012-09-04T09:21:29.440 回答