2013-08-29 12 views
7

In JavaScript sto utilizzando l'evento click per modificare i dati del grafico. Di seguito è riportato un metodo per l'evento click.ID multipli in un singolo evento click JavaScript

$('#pro1').click(function() { 
      chart.series[0].update({ 
       data: pro1 
      }); 
     }); 
     $('#pro2').click(function() { 
      chart.series[0].update({ 
       data: pro2 
      }); 
     }); 
     $('#pro3').click(function() { 
      chart.series[0].update({ 
       data: pro3 
      }); 
     }); 

ho bisogno di minify questi tre eventi click in un unico evento, significa che voglio scrivere un evento click che gestiscono i id. qualche cosa come sotto il codice.

$('#pro'+i).click(function() { 
chart.series[0].update({ 
    data: pro+i 
}); 
}); 


non so come farlo esattamente. Il codice sopra riportato non è corretto, è solo la mia mancanza di conoscenza di JavaScript.

+1

usare una classe e la magia "questo" :) –

+0

sarebbe molto più facile se 'pro' sarà una matrice –

+0

si usa una classe e la" i "sarà $ (questo). indice(); – Romaindr

risposta

8

Vorrei suggerire la creazione di un oggetto e selezionando gli elementi utilizzando classi, id dell'elemento cliccato recupera il valore della proprietà corrispondente dell'oggetto helper:

var pros = { 
    pro1: '...', 
    pro2: '...' 
}; 

$('.pros').click(function() { 
    chart.series[0].update({ 
     data: pros[this.id] 
    }); 
}); 
+0

Grazie funziona per me – MAR

3

Utilizzare una classe.

$('.pro').click(function() { 
chart.series[0].update({ 
    data: $(this).attr('id'); 
}); 
}); 

E poi su ciascuna delle # Pro1, # Pro2, # PRO3 elementi aggiungere una classe di 'pro'

+0

con motivo per il voto negativo? – Niall

+0

Hai avuto 'data: pro + i' senza definire vars per' pro' o 'i'. Rimuovi downvot. –

+0

Cheers, era un work in progress. In realtà era nel mezzo di esso. – Niall

7
$('#pro1,#pro2,#pro3').click(function() { 
    chart.series[0].update({ 
     data: $(this).attr('id'); 
    }); 
}); 

codice aggiornato

$('#pro1,#pro2,#pro3').click(function() { 
    chart.series[0].update({ 
     data: window[this.id] 
    }); 
}); 
+2

'proN' è una variabile non una stringa. Se le variabili sono globali, 'window [this.id]' funzionerà. – undefined

+0

pensi davvero che l'OP voglia passare la stringa come dati del grafico? –

0

Si potrebbe dare tutti i tuoi elementi un nome di classe e usa il selettore: eq() all'interno di jQuery.

2
$("*[id^=pro]").click(function() { 
    chart.series[0].update({ 
     data: $(this).attr('id'); 
    }); 
}); 
29

Prova questo:

var that = this; 
$('#pro1,#pro2,#pro3').click(function() { 
    chart.series[0].update({ 
     data: that[$(this).attr('id')]; 
    }); 
});