为什么我用jquery.val()得到“未定义”?

时间:2010-06-29 16:58:57

标签: jquery undefined

目标:读取一组文本框的当前值。如果值为“None”,则用提供的值替换该值。一旦值改变停止。

当我使用span和.text()而不是文本框和.val()时,一切正常。但是,文本框是表单的一部分。

知道它为什么会以“未定义”的形式返回?

(基本上我是根据用户输入制作一个列表)

HTML:

<input type="text" name="class1" value="None" ><br>
<input type="text" name="class2" value="None" ><br>
<input type="text" name="class3" value="None" ><br>
<input type="text" name="class4" value="None" ><br>
<input type="text" name="class5" value="None" ><br>

jquery的:

function compareClass(a)
   {
      var input = a;
      for(x=1;x<6;x++)
      {
         var classText = $('.class'+x).val();
         if(classText == "None")
         {
            $('.class'+x).val(input);
            break;
         }
      }      
   }

2 个答案:

答案 0 :(得分:9)

您告诉jQuery要查找 class[x]的元素,但是您要分配名称

您可以将name属性更改为id s:

<input type="text" id="class1" value="None" ><br>
<input type="text" id="class2" value="None" ><br>
<input type="text" id="class3" value="None" ><br>
<input type="text" id="class4" value="None" ><br>
<input type="text" id="class5" value="None" ><br>

并按ID获取:

var classText = $('#class'+x).val(); // Note the #!

(显然,“类”现在可能没有任何意义了)

或者,您实际上可以使用class属性,但CSS类可以分配给多个元素,因此它不适合这里。

答案 1 :(得分:1)

在jQuery中使用选择器来简化代码。 [name^=Class]表示所有输入name属性以Class开头(不需要引号)

function compareClass(a)
{
  $('input [name^=Class]').each(function() {

     if ($(this).val() === 'None') $(this).val(a);

  });
}