jquery - page - val() javascript




jQuery val() dentro de la pantalla: ninguno (3)

<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>

Mi formulario cuando está dentro de este elemento que es una caja de luz jquery, el campo #commentFriend obtiene un valor vacío en 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("");
        }
    });
}

Respuesta actualizada

Pero cuando quito la display:none , funciona. ¿Como puedo resolver esto?


Hay tres maneras en que puedes hacer esto;

  1. Haga que el elemento sea visible, actualícelo y luego ocúltelo nuevamente.

  2. detach() el elemento del DOM, hágalo visible, actualícelo, ocúltelo y luego vuelva a insertarlo en el DOM.

  3. clone() el elemento, hágalo visible, actualícelo, ocúltelo, insértelo en el DOM y elimine el elemento original.

Los enfoques # 2 y # 3 son probablemente sus mejores opciones, ya que no activarán un nuevo sorteo. Todas las operaciones se realizan en los elementos "fuera" del DOM (en la memoria, si lo desea). De esta manera su interfaz de usuario no saltará / skitter / shift.


Enfoque # 3:

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

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

    e.after(c);
    e.remove();        
});

Una versión de tiro (no probada):

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

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



Enfoque # 2:

Nota: necesitará un contenedor en el que pueda volver a insertar el elemento separado en

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

    e.detach();
    e.show();
    e.html("...");
    e.hide();
    c.add(e);    
});

Y solo por si acaso, no probado, la versión más corta:

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

Para los campos con display:none , parece que val() no funciona.

Evito este comportamiento con attr() :

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

Tuve el mismo problema. Ninguna de las soluciones anteriores funcionó para mí. Finalmente, podría obtener el valor de mi entrada oculta utilizando el elemento DOM:

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




jquery