2009-07-19 13 views
7

Ho un sacco di funzioni jQuery nel mio script, ma uno in particolare non funziona, questo è il mio funzionefunzione .Click non funziona per me

$('#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 funzione simile come questo sta lavorando

<!-- 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'); 
       }); 
      } 
      });  
     }); 

Ho controllato con firebug, la console non mostra errori, ho controllato l'origine HTML i valori si stanno caricando corretti, ho controllato il mio file php 5 volte è corretto non riesco a capire il problema. Per favore aiuto.

+1

Cosa intendi per non lavoro? Non vedi una chiamata di jax? La richiesta Ajax viene inviata ma non la vedi accodata? –

+0

no la richiesta di ajax non viene inviata, anche la funzione non viene attivata al clic – Shishant

+0

carica la tua pagina e forniscici l'url, risolverà tutte le supposizioni in corso di seguito! – redsquare

risposta

0

Invece di id = cancella ho cambiato in class = cancella in html e js ('.Delete') e si sta lavorando bene ora, ma quando ancora una volta provato con id doesnt lavoro.

Grazie a tutti per l'aiuto, non ho alcun problema se si tratta di identificazione o di classe, solo la funzione funziona ora.

+0

Guarda che ti ricordi di .delete, quindi non ti morderà in pista. Può valere la pena rendere il selettore più specifico o la classe 'delete-record'. Inoltre, varrebbe la pena di rintracciare esattamente perché non funziona, nel caso in cui si alzi, è di nuovo in testa. – alex

+0

Ho provato tutto il possibile e non so ancora perché non ha funzionato con id = delete e ha funzionato con class = delete e ho anche provato a rinominare gli id ​​con nomi univoci ma nulla ha aiutato eccetto class = delete – Shishant

+2

Avevo lo stesso problema e usando la classe l'ho risolto anche per me. Ma è stato davvero un problema di classe vs ID per me. Stavo assegnando un ID a un div ripetuto più volte. Quindi duplicato id! MA dal momento che ho avuto questo in un ciclo for di un modello di mako ho trascurato il fatto che sarà ripetuto più volte, DOH !!! Lezione: apri il file in un browser e visualizza la sorgente, quindi verifica se l'elemento div è ripetuto o meno. – Juba

5

Con il primo, inserisco un rapido e sgradevole alert() all'interno della funzione anonima dei clic, per assicurarmi che venga attivato. Elimina i motivi per cui potrebbe non funzionare. Inoltre, prova a utilizzare le intestazioni HTTP Live o la console di Firebug per verificare se è stata inviata la richiesta AJAX.

Se il clic non viene attivato, verificare se il selettore è corretto. Mi capita spesso di fare questo (molto brutta)

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

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

Non sarà sempre visibile, ma se si vede style = "border: 1px solid red" `nel codice generato, si conosce il selettore è sulla palla .

Forse hai un altro clic che lo sta sovrascrivendo? Provare a utilizzare

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

ho aggiunto l'avviso ma non viene generato ma l'avviso funziona correttamente con altre funzioni. – Shishant

0

1) e prima dell'ultima }); si dovrebbe aggiungere return false;

2) Sei sicuro che lo #delete esista? Inoltre, sei sicuro che sia UNICO?

+0

Sì, il pulsante esiste ed è un nome univoco. – Shishant

+0

Mi piacerebbe seguire la parte UNIQUE. Se l'ID, "elimina" esiste più di una volta nel DOM, otterrai risultati imprevisti. – mveerman

+0

ho provato a mettere un singolo pulsante con lo stesso codice precedente rimuovendo la parte html con id di button = delete ancora non viene sparato. – Shishant

0

Questo è un campo lungo, ma è bene essere a conoscenza. http://code.google.com/p/fbug/issues/detail?id=1948

Potrebbe non essere un problema se non si è su Firefox 3.5.

+0

La pagina di esempio creata da lui funziona correttamente senza errori. – Shishant

+0

Forse elimina Firebug dall'equazione. Anche se il bug di cui sopra non si applica, ho riscontrato problemi in cui Firebug ha causato un comportamento strano in Firefox, almeno temporaneamente. Riavvia Firefox. – mveerman

1

Non so se questo si applica al tuo contesto, ma se hai parti della pagina che vengono caricate da AJAX, dovrai associare i gestori di clic dopo che il contenuto è stato caricato, ovvero $ (documento). Già non funzionerà. Ho incontrato questo problema un certo numero di volte, in cui determinati eventi si attivano fino a quando alcune parti della pagina vengono ricaricate, quindi all'improvviso gli eventi sembrano smettere di sparare.

4

Ho appena avuto lo stesso problema con un rapido esempio su cui stavo lavorando. La soluzione era inserire il click dentro $ (document) .ready. Stavo cercando di usare il mio elemento prima che fosse effettivamente pronto per essere utilizzato.

È JavaScript di base aspettare che il DOM sia pronto prima di provare a usare un elemento, ma ... per qualche ragione ho dimenticato di farlo, quindi forse è successo anche a te.

34

Ho faticato con l'ESAME PROBLEMA DELLO STESSO per 6 ore di fila!la soluzione era usare jquery "live".

E questo è tutto.

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

Qualche idea sul perché .click non funzioni e questo? – PsychoDUCK

+2

quando usiamo la funzione live, jQuery inizia a tenere traccia di tutte le modifiche apportate nel DOM, che include i nuovi dati/elementi dalla richiesta Ajax o la rimozione di qualsiasi elemento. –

+0

THanks molto .. Sono rimasto bloccato nello stesso problema per come 2 giorni .. Ho visto questo post /// live ha funzionato come un incantesimo .. :) – ashishashen

1

Basta usare la vostra .click con $(document).ready(function(){ ... }); perché si sta tentando di applicare l'evento click su un elemento inesistente.

0

C'è alcune cose che puoi fare:

  1. come Elmo Gallo e Shooz Eh suggerito, inserire il codice in $(document).ready(function(){...});
  2. codice tua $('#delete').click(function(){...}); istruzione dopo il tag <button> evento,
  3. uso $('#submit').live('click',function(){...}); come Parikshit Tiwari suggerito.

Ognuno di questi dovrebbe funzionare ok.

EDIT: oops, non vedere che questo è stato chiesto '09: D

0

Penso che è necessario utilizzare la funzione .on() per dinamicamente run codice jQuery come questo:

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

jQuery 1.7+ ha ammortizzato .live() e ora usa .on() invece :)

Problemi correlati