jQuery val()里面显示:none

<a href="#addFriend" rel="facebox" title="[+] add  as friend"> 

我的表单在这个元素里面是一个jquery灯箱,字段#commentFriend在DoFriendRequest中获取空值

 function DoFriendRequest() { var wrapperId = '#insert_svar'; $.ajax({ type: "POST", url: "misc/AddFriendRequest.php", data: { mode: 'ajax', comment : $('#commentFriend').val() }, success: function(msg) { $(wrapperId).prepend(msg); $('#commentFriend').val(""); } }); } 

更新的答案

但当我删除display:none ,它的工作原理。 我怎么解决这个问题?

对于display:none字段,似乎val()不起作用。

我用attr()绕过了这个行为:

 $('input').attr('value',myNewValue); 

你有三种方法可以解决这个问题;

  1. 使元素可见,更新它,然后再次隐藏它。

  2. 从DOM中分离元素,使其可见,更新它,隐藏它,然后重新插入DOM。

  3. clone()元素,使其可见,更新它,隐藏它,将其插入DOM并删除原始元素。

方法#2和#3可能是您的最佳选择,因为这些不会触发重新绘制。 所有操作都是对DOM“外部”的元素进行的(如果你愿意的话,在内存中)。 这样你的UI就不会跳/滑动/移动。

方法#3:

 $(function () { var e = $("..."); var c = e.clone(); c.show(); c.html("..."); c.hide(); e.after(c); e.remove(); }); 

射击游戏版本(未测试):

 var e = $("..."); e.append(e.clone().show().html("...").hide()).remove(); 

方法#2:

注意:您将需要一个容器,您可以将分离的元素重新插入其中

 $(function () { var e = $("..."); var c = $("container"); e.detach(); e.show(); e.html("..."); e.hide(); c.add(e); }); 

只是为了好的措施 – 没有经过测试 – 更短的版本:

 $("container").add($("...").detach().show().html("...").hide()); 

我遇到过同样的问题。 上述解决方案都不适合我。 我finnaly我可以通过使用DOM元素获取我的隐藏输入的值:

 var el = document.getElementById("commentFriend"); var hiddenValue = el.getAttribute("value"); 

答案太迟了但也许对某人来说很好。 如果你想要一些带有display:none和使用jQuery或JS函数的元素你需要先用jQuery隐藏元素,然后一切都很好,你可以用addClass来定义你的类或者用.show() .hide().show()

例如

 $(document).ready(function() { $('element1').hide(); $('element2').hide(); var element1 = $('element1').val(); console.log(element1); }); 

与您为示例类.hidden创建的CSS相同并执行此操作。

CSS

 .hidden { display:none; } 

jQuery的:

 $(document).ready(function() { $('element1').addClass('hidden'); $('element2').addClass('hidden'); var element1 = $('element1').val(); console.log(element1); }); 

Whit JavaScript会为你的元素添加CSS类。