Tengo el siguiente código HTML:

<form method='post' name='form".$post->ID."' >
   <input type='submit' name='bid".$post->ID."' value='Licitar' class='bidvalue'>
</form>

Y tengo el siguiente jQuery dentro de un bucle de PHP para manejar el evento de envío:

<script>
jQuery('input[type=submit]').click(function(e) {
    e.preventDefault();
    jQuery.ajax({
        type: 'POST',
        url: ajaxurl,
        data: 'action=newbid&id=".$post->ID."',
        success: function(msg){
            jQuery('#vehicle-value-box".$post->ID."').html(msg+',00€');
        }
});
</script>

Cuando el usuario hace clic en el botón de enviar, quiero actualizar el valor de la oferta actual y la actualización de la caja con ese valor con el AJAX. Lo estoy haciendo en functions.php con:

function newbid_ajax() {
    $post_id = $_POST['id'];
    $mybid = get_post_meta($post_id, 'start_price', true);
    $mybid = $mybid + 100;
    update_post_meta($post_id,'start_price',$mybid);
    die($mybid);
}

Sin embargo, yo no puedo manejar la forma de presentar eventos por separado. Tengo 3 prueba de subastas. Cuando hago clic en Subasta #1, se actualiza el valor de Subasta #2; cuando hago clic en Subasta #2, las actualizaciones de la Subasta #3; cuando hago clic en Subasta #3, nada se actualiza y correo.preventDefault(); no funciona (la página se vuelve a cargar).

Usted puede tomar un vistazo a la página web en este ubicación. El botón de enviar el texto «LICITAR».

Entiendo que hay otros puestos que hay en cuanto a este problema, pero por alguna razón no puede llegar a adaptar sus soluciones a mi problema.

Gracias de antemano.

  • a ver si el cambio de tipo de entrada en el botón en lugar de enviar ayuda a cualquier forma como se está presentando con ajax. también si hay varios botones de envío en el formulario que esto no funcionará como cada vez que se activan de la misma llamada ajax en enviar. mientras que dar separado identificadores a los botones y reemplazar su selectores de jquery
  • Es que jQuery <script>…</script> dentro de algunos bucle de PHP? Si sí, Usted probablemente tiene 3 eventos onclick en todos los botones de envío, cada onclick con diferentes $post->ID. Ver el código fuente del HTML de la página si este es el caso. Entonces tendrás que usar jQuery(‘formulario de[nombre=».$post->ID.»] input[type=submit]’)
  • Cambia al botón de no ayudar.
  • Sí, está dentro de un bucle de PHP. La adición de la forma[nombre=».$post->ID.»] para que el script no funciona, vuelve a cargar la página y no hay ningún valor actualizado.
  • Lo siento, me refiero a la forma[name=»formulario.$post->ID.»] input[type=submit]
  • Intentado pero me sale el mismo resultado.

InformationsquelleAutor David Matos | 2014-02-21

2 Comentarios

  1. 2

    Mirando la fuente de la URL proporcionada tiene jQuery, haga clic en controlador para cada formulario:

    jQuery('input[type=submit]')

    Este enfoque podría resultar en más de un enlace para cada forma de botón de enviar, dependiendo de cómo el código está estructurado.

    La solución es tener un solo clic controlador declaradas dentro de un $( document ).ready(...).
    El botón y la función a continuación han sido modificados para trabajar en este escenario (no probado):

    <input type='submit' name='".$post->ID."' value='Licitar' class='bidvalue'>

    La función a continuación declara sólo una vez, fuera de cualquier bucle, y en general en el <head></head> sección del documento.

    $(document).ready(function()
    {
        jQuery('.bidvalue').click(function(e) {
            e.preventDefault();
            jQuery.ajax({
                type: 'POST',
                url: ajaxurl,
                data: 'action=newbid&id='+e.target.name,
                success: function(msg){
                    jQuery('#vehicle-value-box'+e.target.name).html(msg+',00€');
                }
        });
    });
    • Eso es una mejora. Pero todavía tengo dos problemas. Uno, tengo otras diferentes publique en mi sitio web, es decir, el inicio de sesión de enviar. ¿Cómo puedo editar el script para trabajar sólo con las subastas presenta? Y dos, de alguna manera, el cuadro con el valor no es la actualización correctamente, en lugar de tener el nuevo valor se cambia a «,00€». La variable msg parece estar vacío.
    • Puede seleccionar el botón de la clase, en lugar de seleccionar cada botón enviar: jQuery('.bidvalue'). También he actualizado el script de arriba.
    • También puede depurar la msg valor de la variable por console.debug() o alerting, para saber si el problema viene desde el servidor.
    • Que era obvio, mi mal! Gracias. Alguna idea sobre el valor de la casilla de actualización?
    • Que bien! Has probado si el servidor devuelve el valor correcto?
    • El servidor devuelve null. No debe morir($mybid) devuelve el valor de esa variable y asignarle a msg en success: function(msg)?
    • Podrías compartir el código fuente del script php en un pastebin para que podamos echar un vistazo?
    • No es que el newbid_ajax función que he publicado anteriormente?
    • Usted no debe tratar a la salida de un número utilizando die() como que sería el equivalente a exit(), el número actúa como un estado de salida y no se imprimirá. Para asegurarse de que obtiene el número devuelto por el script debe explícitamente echo es: echo $mybid; php.net/manual/en/function.exit.php

  2. 0

    si me udnerstand su correctamente tiene múltiples formas y eatch para las necesidades de tener su propia función de ajax?

    Que usted tiene que dar el presentar una identificación:

    <form method='post' name='form".$post->ID."' >
       <input type='submit' name='bid".$post->ID."' id="submit-1" value='Licitar' class='bidvalue'>
    </form>

    Nueva js:

    <script>
    $('form').submit(function( e ) {
        e.preventDefault();
        jQuery.ajax({
            type: 'POST',
            url: ajaxurl,
            data: 'action=newbid&id=".$post->ID."',
            success: function(msg){
                jQuery('#vehicle-value-box".$post->ID."').html(msg+',00€');
            }
    });
    </script>

    Editado intentar que

    • He intentado añadir a la etiqueta input id= «enviar».$post->ID.»‘ y, a continuación, cambiar el script de jQuery(‘#enviar».$post->ID.»‘).haga clic en (…). Tengo el mismo problema con el Romano Hocke sugerencia de hacer esto vuelve a cargar la página y no hay ningún valor actualizado.
    • he editado el post podría usted por favor trate de eso?
    • Que editar lo pone de nuevo en el problema original: los valores se actualizan, pero no en el derecho de la subasta. Yo podría añadir todo esto está dentro de un bucle.

Dejar respuesta

Please enter your comment!
Please enter your name here