2009-07-19 19 views
7

Tengo un montón de funciones de jQuery en mi guión, pero una en particular no está funcionando, este es mi funciónfunción .click que no trabaja para mí

$('#delete').click(function() { 
      var id = $(this).val(); 
      $.ajax({ 
        type: 'post', 
        url: 'update.php', 
        data: 'action=delete&id=' + id , 
        success: function(response) { 
          $('#response').fadeOut('500').empty().fadeIn('500').append(response); 
          $(this).parent('tr').slideUp('500').empty(); 
          } 
       });   
     }); 

una función similar como esto está trabajando

<!-- WORKING FUNCTION --> 
$('#UpdateAll').click(function() { 
      $.ajax({ 
      type: 'post', 
      url: 'update.php', 
      data: 'action=updateAll', 

      success: function(response) { 
       $('#response').fadeOut('500').empty().fadeIn('500').append(response); 

       $('#table').slideUp('1000').load('data.php #table', function() { 
        $(this).hide().appendTo('#divContainer').slideDown('1000'); 
       }); 
      } 
      });  
     }); 

Comprobé con firebug, la consola no muestra ningún error, comprobé que la fuente html los valores se están cargando correctamente, revisé mi archivo php 5 veces es correcto, no puedo resolver el problema. Por favor ayuda.

+1

¿Qué quiere decir con no funcionar? ¿No ves que ocurre una llamada ajax? La solicitud de ajax se envía pero no la ve anexa. –

+0

no se envía la solicitud de ajax, incluso la función no se activa al hacer clic en – Shishant

+0

cargar su página y darnos la url, ¡resolverá todas las conjeturas que están sucediendo a continuación! – redsquare

Respuesta

0

En lugar de id = eliminar lo cambié a class = borrar en html y en js ('.Delete') y está funcionando bien ahora pero cuando lo intentó de nuevo con id no trabaja.

Gracias a todos por la Ayuda, no tengo ningún problema si es id o clase, simplemente la función funciona ahora.

+0

Mira cómo recuerdas sobre .delete, por lo que no te morderá la pista. Puede valer la pena hacer que el selector sea más específico, o la clase 'eliminar-grabar'. Además, valdría la pena rastrear exactamente por qué no funciona, en caso de que vuelva a aparecer de nuevo en la pista. – alex

+0

Intenté todo lo posible y todavía no sé por qué no funcionó con id = delete y funcionó con class = delete y también intenté cambiar el nombre de los identificadores a nombres extremadamente únicos pero nada me ayudó excepto class = eliminar – Shishant

+2

Estaba teniendo el mismo problema y usar clase también lo resolvió para mí. Pero fue realmente un problema de clase versus identificación para mí. Estaba asignando una identificación a un div que se repetía muchas veces. ¡Así que duplicar la identificación! PERO dado que tenía esto en un bucle for de una plantilla de mako, pasé por alto el hecho de que se repetirá varias veces, DOH !!! Lección: abra el archivo en un navegador y vea la fuente, luego vea si el elemento div se repite o no. – Juba

5

Con el primero, pondría un alert() rápido y desagradable dentro de la función anónima de clic, para asegurar que se está disparando. Elimine las razones por las cuales puede no estar funcionando. Además, intente utilizar los encabezados HTTP en vivo o la consola de Firebug para ver si se está enviando la solicitud AJAX.

Si el clic no se activa, verifique si tiene el selector correcto. A menudo hago esto (bastante desagradable)

var testSelector = 'p:first ul li:last'; 

$(testSelector).css({ border: '1px solid red' }); 

No siempre será visible, pero si ves style = "border: 1px roja sólida" `en el marcado generado, usted sabe que su selector está en la bola .

¿Quizás tiene otro clic que lo sobrescribe? Trate de usar

$('#delete').bind('click', function() { 
    // do it 
}); 
+0

agregué la alerta pero no la despiden, pero la alerta funciona bien con otras funciones. – Shishant

0

1) antes de la última }); se debe añadir return false;

2) ¿Está seguro de que existe #delete? Además, ¿estás seguro de que es ÚNICO?

+0

Sí, el botón existe y es el nombre único de identificación. – Shishant

+0

Me gustaría secundar la parte ÚNICA. Si la identificación, "eliminar" existe más de una vez en el DOM, obtendrá resultados inesperados. – mveerman

+0

intenté colocar un solo botón con el mismo código anterior quitando la parte html con el id de botón = eliminar aún no se está disparando. – Shishant

0

Esta es una posibilidad remota, pero es bueno tenerlo en cuenta. http://code.google.com/p/fbug/issues/detail?id=1948

Puede que no sea un problema si no está en Firefox 3.5.

+0

La página de ejemplo creada por él está funcionando bien sin ningún error. – Shishant

+0

Tal vez elimine Firebug de la ecuación. Incluso si el error anterior no se aplica, me he encontrado con problemas donde Firebug ha causado un comportamiento extraño en Firefox, al menos temporalmente. Reinicia Firefox. – mveerman

1

No sé si esto se aplica en su contexto, pero si tiene partes de la página que están siendo cargadas por AJAX, deberá vincular los manejadores de clic una vez que se cargue ese contenido, lo que significa un $ (documento). listo no va a funcionar. Me he encontrado con este problema varias veces, donde ciertos eventos se dispararán bien hasta que se vuelvan a cargar partes de la página, y de repente los eventos parecen dejar de disparar.

4

Acabo de tener el mismo problema con un ejemplo rápido en el que estaba trabajando. La solución fue poner el clic dentro $ (documento). Listo. Estaba tratando de usar mi elemento antes de que estuviera listo para ser utilizado.

Es el JavaScript básico para esperar hasta que el DOM esté listo antes de intentar usar un elemento, pero ... por alguna razón me olvidé de hacer eso, por lo que tal vez te haya pasado lo mismo.

34

¡Luché con el EXACTO MISMO PROBLEMA durante 6 horas seguidas!la solución fue usar jquery 'en vivo'.

Y eso es todo.

$('#submit').live('click',function(){ 
...code... 
}); 
+0

¿Alguna idea de por qué el .click no funciona y esto funciona? – PsychoDUCK

+2

cuando usamos la función en vivo, jQuery comienza a realizar un seguimiento de todos los cambios realizados en el DOM, que incluye los nuevos datos/elementos de la solicitud de ajax o la eliminación de cualquier elemento. –

+0

Muchas gracias ... Estuve atrapado en el mismo problema durante 2 días ... Solo vi esta publicación /// en vivo funcionó como un encanto ... :) – ashishashen

1

Sólo tiene que utilizar su .click con $(document).ready(function(){ ... }); ya que están tratando de aplicar el evento click en un elemento inexistente.

0

Hay algunas cosas que puede hacer:

  1. como Elmo Gallen y Shooz Eh sugirió, poner su código en $(document).ready(function(){...});
  2. código de su manipulación después de su etiqueta <button>$('#delete').click(function(){...}); caso,
  3. uso $('#submit').live('click',function(){...}); como Parikshit Tiwari sugirió.

Todos estos deberían funcionar bien.

EDIT: ¡Uy, no vio que este se le preguntó '09: D

0

Creo que se debe utilizar .on() función para ejecutar código de forma dinámica en jQuery así:

$(document).on("click","#delete",function(){ }); 
4
$(document).on('click', '#selector', function(){ 
    // do something 
}); 

jQuery 1.7+ ha depreciado .live() y ahora usa .on() en su lugar :)