page jQuery val() dentro de la pantalla: ninguno




val() javascript (4)

Respuesta demasiado tardía pero quizás para alguien sea bueno. Si desea tener algunos elementos con display: none y usar las funciones de jQuery o JS, primero debe ocultar los elementos con jQuery y luego todo está bien, puede hacerlo con addClass y definir su clase o con .hide() y .show() .

Por ejemplo

$(document).ready(function() {
    $('element1').hide();
    $('element2').hide();

    var element1 = $('element1').val();
    console.log(element1);
});

Es lo mismo con CSS que creas, por ejemplo, clase .hidden y haz esto.

CSS

.hidden {
    display:none;
}

jQuery:

$(document).ready(function() {
    $('element1').addClass('hidden');
    $('element2').addClass('hidden');

    var element1 = $('element1').val();
    console.log(element1);
});

Con JavaScript, hazlo agregando clases CSS a tu elemento.

<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());

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");

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

Evito este comportamiento con attr() :

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






jquery