Muszę wykonywać różne działania za różne divy. Mam następujący kod:

$("#pending-cancel-1, #pending-cancel-2").click(function(){

  Do something 1...

});

$("#pending-done-success").click(function(){

  Do something 2...

});

Czy byłoby możliwe napisanie czegoś takiego:

$("#pending-cancel-1, #pending-cancel-2, #pending-done-success").click(function(){

  ...
  if("#pending-cancel-1, #pending-cancel-2")
      Do something 1...
  else if("#pending-done-success")
      Do something 2...
  else:
      Do something 3...


});

Dzięki!

-2
Vladimir 4 grudzień 2013, 00:58

3 odpowiedzi

Najlepsza odpowiedź

Cóż, możesz użyć

if ($(this).is("#pending-cancel-1, #pending-cancel-2")) {

Ale to nie wygląda tu bardzo przydatne. Zwykle nie wiążysz przewodnika o zdarzeniu do różnych elementów, aby zachować zmianę wewnątrz w zależności od elementu.

Myślę, że robisz to, ponieważ część zachowania jest wspólna, ale nawet tam, wolałbym mieć różne oferty obsługi zdarzeń, które wywołują wspólną funkcję bez konieczności przetestowania selektora w przewodniku zdarzeń.

3
Denys Séguret 3 grudzień 2013, 20:59

Dlaczego w pierwszej kolejności połączyłbyś 2 funkcje, jeśli właśnie umieściłbyś warunek, aby je oddzielić?

Wygląda na to, że strategia projektu.

2
mcserep 3 grudzień 2013, 21:01

Co powiesz na

$("#pending-done-success,#pending-cancel-1, #pending-cancel-2").click(function(){
  var id = $(this).attr('id');
  switch(id){
    case 'pending-done-success':
      /* Do something */
      break;
    case 'pending-cancel-1':
      /* Do something */
      break;
    case 'pending-cancel-2':
      /* Do something else */
      break;
  }

});

Może być znacznie czyszczący, ale; łatwo, tylko dodając im wspólną klasę (ale trzymaj identyfikator), coś takiego:

$(".pending").click(function(){
  var id = $(this).attr('id');
  switch(id){
    case 'pending-done-success':
      /* Do something */
      break;
    case 'pending-cancel-1':
      /* Do something */
      break;
    case 'pending-cancel-2':
      /* Do something */
      break;
  }

});

Lub tak jak w twoim przykładzie, byłoby to:

$(".pending").click(function(){
  var id = $(this).attr('id');
  switch(id){
    case 'pending-done-success':
      /* Do something */
      break;
    case 'pending-cancel-1':
    case 'pending-cancel-2':
      /* Do something */
      break;
  }

});
0
Toni Michel Caubet 3 grudzień 2013, 21:08