2012-06-20 9 views
8

È possibile interrompere l'ordinamento delle tabelle se l'utente fa clic su div all'interno dell'intestazione della tabella th?jQuery Selezionatore tabelle: interrompe ordinamento

Nel mio caso div ha funzione onClick="resize(e)" su cui faccio:

function resize(e) { 
     if (!e) var e = window.event; 
     e.stopPropagation(); 
     .... 

Ma non funziona.

Edit: tabella è ordinata prima e.stopPropagation() o return false

+1

Invece di usare l'attributo 'onClick', provare a collegare un evento click utilizzando jQuery (qualcosa come' $ ("TH div") clicca (function (event) {}).; 'e inserisci il tuo codice di ridimensionamento in quella funzione, quindi' event.stopPropagation() 'potrebbe funzionare. – MrOBrian

+0

Grazie, ma ho anche provato come Ajay beni indicato – andriy

+0

Puoi mostrare un codice live o preferibilmente un [jsfiddle] (http://jsfiddle.net) – Jashwant

risposta

7

ho fatto due demo per te. Il primo ha il contenuto dell'intestazione della tabella avvolto in uno span e il secondo utilizza la funzione non documentata onRenderHeader per aggiungere span nell'intestazione. In entrambi i casi, solo i contenuti dello span sono cliccabili (il testo) mentre si fa clic all'esterno del contenuto si ordina la colonna. Se si utilizza uno div, è disponibile solo il riempimento dell'intestazione per inizializzare l'ordinamento di una colonna.

Demo 1 - contenuto dell'intestazione avvolti nel markup

$('table') 
    .tablesorter() 
    .find('.inner-header') 
    .click(function(){ 
     console.log('header text clicked'); 
     return false; 
    }); 

Demo 2 - contenuto di intestazione avvolto utilizzando l'opzione

$('table').tablesorter({ 

    // customize header HTML 
    onRenderHeader: function(index) { 
     $(this) 
      .wrapInner('<span class="inner-header"/>') 
      .find('.inner-header') 
      .click(function(){ 
       console.log('header text clicked'); 
       return false; 
      }); 
    } 

});​ 

onRenderHeader Se avete bisogno di ulteriori informazioni sull'utilizzo l'opzione onRenderHeader, controllare il mio blog post su cosa manca nei documenti.

4

arresto propagazione prevenire evento dalla zampillante, ma si vuole cancellare l'azione di default si dovrebbe usare event.preventDefault()

+0

Non funziona La tabella viene ordinata per prima e quindi viene invocata questa funzione Come eseguire questa funzione prima dell'ordinamento della tabella? – andriy

+0

Caro Andriy, penso che dipenda dalla tua struttura html si presuppone uno scenario come

quindi se si allega un evento onclick a TH allora l'evento salterà da div a TH e quindi all'interno della funzione onclick è possibile controllare la fonte dell'evento e se è div si può usare stoppropogation per smettere di ribollire evento a TH in modo che l'evento principale di ordinamento non venga attivato –

+0

Ordinamento in corso: \ per origine evento intendevi 'if (event.srcElement.className ==" resizer ")'? – andriy

4

Mi sono imbattuto in questo esatto problema. Ho provato tutto suggerito, incluso l'assegnazione diretta di un gestore di eventi non delegato all'elemento preciso che volevo, quindi l'interruzione di tutte le propagazioni + l'evento stesso. Ancora senza fortuna.

Ma .... si scopre il tablesorter jQuery assegna un evento per l'evento MouseUp , non l'evento click (come ci si aspetterebbe!). Quindi, per evitare che tablesort faccia la cosa, devi solo cancellare quell'evento. Spero che questo ti aiuti.

  • Ben
Problemi correlati