2012-06-29 7 views
0

Можно создать дубликат:
Bind multiple events to jQuery 'live' methodобработчик событий на несколько событий

У меня есть следующие функции:

$("td.delivered").click(function() { 

     $(this).html($("<input/>", { 
      id: 'inp', 
      style: 'width:80px;', 
      placeholder: "YYYY-MM-DD", 
      change: function() { 
      selectdone(this, title_id, status_type); 
      }, 
      blur: function() { 
      selectdone(this, title_id, status_type); 
      }, 
      onkeypress=="Return": function() { // pseudo-code 
      selectdone(this, title_id, status_type); 
      } 
     }) 
     ); 
} 

следующие работы, что было бы лучше, чтобы Напиши это?

  change: function() { 
      selectdone(this, title_id, status_type); 
      }, 
      blur: function() { 
      selectdone(this, title_id, status_type); 
      }, 
      onkeypress: function(e) { 
      if (e.keyCode == 13) { 
      selectdone(this, title_id, status_type); 
      } 
      } 

Как бы я пишу это более сжато, делая selectdone функции огня по change, blur и return?

+0

Почему вам нужно размытие и изменение? blur покрывает значение, которое изменяется или нет. – Ian

+0

@ianpgall Blur будет учитывать, если пользователь нажимает на другой элемент, и в этом случае я хочу, чтобы функция срабатывала. Например, если вы нажмете свое пользовательское меню в StackOverflow, а затем снова щелкните в другом месте на странице, пользовательское меню исчезнет. – David542

+0

О, я понимаю это, но это означает, что вам также не нужно связывать «изменение». все «изменение» есть, когда элемент не сфокусирован и значение изменилось. «Размытие» - это просто, когда элемент не сфокусирован. – Ian

ответ

1
$(this).html($("<input/>", { 
     id: 'inp', 
     style: 'width:80px;', 
     placeholder: "YYYY-MM-DD" 
    }); 

$('input', this).bind('change blur keypress', function(e) { 
    if(e.type != 'keypress' || e.keyCode == 13){ 
     selectdone(this, title_id, status_type); 
    } 
}); 
+0

это не учитывает функцию псевдотерапии – Blaster

+0

theere ya gooooo – maxhud

+0

@maxhud спасибо, не могли бы вы написать полную функцию, и я приму ваш ответ – David542

2

Вы можете использовать bind:

$(this).html($("<input/>", { 
     id: 'inp', 
     style: 'width:80px;', 
     placeholder: "YYYY-MM-DD", 
     change: function() { 
     selectdone(this, title_id, status_type); 
     } 
    }); 

    $(this).bind('blur keypress change', function(e){ 
    selectdone(this, title_id, status_type); 
    }); 

Вы, возможно, потребуется изменить код для различных событий. Обратите внимание, что для того, чтобы узнать, какое событие в данный момент запущено, вы должны использовать e.type

+0

это не учитывает функцию псевдотерапии – maxhud

+2

, но это не так просто. вы должны проверить тип события, а затем посмотреть, является ли это «нажатием клавиши» или что-то еще, а затем проверить код ключа события для «13», поскольку это ключевой код кнопки возврата. – Ian