2013-06-18 42 views
7

在输入内容中输入内容并点击按钮后,“.val()”返回一个空值,为什么?jQuery.val()在<input>标记上不起作用

HTML代码:

<div class="mainClass"> 
    <div class="class1" > 
     <div class="class2"> 
     <h3>Settings 1</h3> 
     <label> 
      <span>Text 1:</span> 
      <input type="text" name="text"> 
     </label> 
     <label> 
      <span>Text 2:</span> 
      <input type="text" name="text2"> 
     </label> 
     </div> 
    </div> 

    <div class="class3" > 
     <div class="class4"> 
     <h3>Settings 2</h3> 
     <label> 
      <span>Text 1:</span> 
      <input type="text" name="text"> 
     </label> 
     <label> 
      <span>Text 2:</span> 
      <input type="text" name="text2"> 
     </label> 
     </div> 
    </div> 
</div> 
<button id="Go" class="go" >GO </button> 

JavaScript代码:

$('#Go').on('click', function() { 
    alert($('.class1 input').val()); //return an empty value 
    $('.class1 input').val("test"); 
    alert($('.class1 input').val()); //return test 
}); 

编辑:

即使这并不工作,这里我只是一个输入,所以我不能键入错误的:

<div class="mainClass"> 
    <div class="class1" > 
     <div class="class2"> 
     <h3>Settings 1</h3> 
     <label> 
      <span>Text 1:</span> 
      <input type="text" name="text"> 
     </label>   
     </div> 
    </div> 
</div> 
<button id="Go" class="go" >GO </button> 

编辑2:我发现这个问题的一个开始......

当我这样做:

$('.class1 input').each(function() { 
    alert($(this).attr('name') + " value:" +$(this).val()); 
}); 

我得到两个“警告”是这样的:

text value: 
text value:myinputText  

于是两个创建在我的HTML中,第一个是空的,第二个很好用! 仔细看我的网页,我发现所有元素都是重复的(<select,field, input...

任何想法怎么可能?我打电话两次我的HTML文件? 我所有的代码是在一个弹出(我不知道它是否能够帮助) (我在Javascript和jQuery新)

感谢

+0

''不是标签.. –

+0

@dystroy为什么不应该这样呢?我很确定这是完全有效的,并接受这样做 – Ian

+0

@dystroy这里有一个参考:http://stackoverflow.com/questions/774054/should-i-put-input-tag-inside-label-tag – Ian

回答

11

有一个以上的元件匹配'.class1 input'的。你可能没有填写第一个。

the documentation

获取该组匹配 元件的第一元件的电流值。

虽然val('text')填满所有匹配的元素:

设置每个元素的值在匹配的元素集合

的这就是为什么你看到你的第二个警告的东西。

你最好使用更具选择性的选择器。通常我们使用一个id或一个名字,如果一个表单被用来将值发送到服务器。

+0

看到我的编辑.... – durje

+0

你能在一个小提琴语法正确的代码重现问题了吗? –

+0

不,这是在小提琴做工精细! – durje

1

您有多个匹配的元素。

jQuery docs

.val()

获取第一元件的当前值的集合中的 匹配元素或设置每个匹配的元素的值。

您只获取匹配集的第一个元素作为文档状态。如果你想要所有的值,你需要遍历整个集合。

+0

看到我的编辑.... – durje

+2

当我评论提醒下你的车线工作正常,我:http://jsfiddle.net/ XqHzT/ – epascarello

+0

亚我看到了,我不知道为什么它不适用于我,但感谢您的帮助。 – durje

3
$('.class1 input').val() 

指两个元件

<input type="text" name="text"> 

<input type="text" name="text2"> 
+0

看到我的编辑.... – durje

0

缠绕在文档准备块jQuery代码:

$('document').ready(function(){}); 

,比如s o:

$('document').ready(function(){ 
    $('#Go').on('click', function() { 
     alert($('.class1 input').val()); //return an empty value 
     $('.class1 input').val("test"); 
     alert($('.class1 input').val()); //return test 
    }); 
}); 

即使有谷歌搜索和Stackoverflow的帮助,我们花了1个小时才找出这个问题。