jQuery val()里面显示:none

Kar*_*rem 21 jquery

<a href="#addFriend" rel="facebox" title="[+] add <?php echo $showU["full_name"]; ?> as friend">
    <div class="addFriend"></div></A>

<div id="addFriend" style="display:none; margin: auto;">
    <form action="javascript:DoFriendRequest()" method="post">
        <input name="commentFriend" type="text" id="commentFriend" value="" size="22"> 
        <input name="submit" type="submit" id="submit" value="Send">
    </form>
</div>
Run Code Online (Sandbox Code Playgroud)

我的表单在这个元素里面是一个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("");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

更新的答案

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

Yak*_*ako 21

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

我绕过了这种行为attr():

$('input').attr('value',myNewValue);
Run Code Online (Sandbox Code Playgroud)

  • 它不适用于“display:none”并给出“未定义”值。根据文档和我的测试, attr() 方法仅适用于从 DOM 获取预定义的 value="'" 属性,而不是像 val() 方法那样获取用户输入的实时值。 (2认同)

cll*_*pse 3

您可以通过三种方式来解决此问题;

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

  2. 从 DOM 中detach()元素,使其可见,更新它,隐藏它,然后重新插入到 DOM 中。

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

方法#2 和#3 可能是您最好的选择,因为它们不会触发重新抽签。所有操作都是针对 DOM“外部”的元素(如果愿意的话,在内存中)完成的。这样你的用户界面就不会跳跃/滑动/移动。


方法#3:

$(function ()
{
    var e = $("...");
    var c = e.clone();

    c.show();
    c.html("...");
    c.hide();

    e.after(c);
    e.remove();        
});
Run Code Online (Sandbox Code Playgroud)

射手版本(未测试):

var e = $("...");

e.append(e.clone().show().html("...").hide()).remove();
Run Code Online (Sandbox Code Playgroud)



方法#2:

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

$(function ()
{
    var e = $("...");
    var c = $("container");

    e.detach();
    e.show();
    e.html("...");
    e.hide();
    c.add(e);    
});
Run Code Online (Sandbox Code Playgroud)

只是为了更好地衡量 - 未经测试 - 较短的版本:

$("container").add($("...").detach().show().html("...").hide());
Run Code Online (Sandbox Code Playgroud)