В JavaScript существует ли такое событие, как onCreate?

#javascript #jquery #javascript-events

#javascript #jquery #jquery-события

Вопрос:

Я работаю с существующей системой, созданной кем-то другим (ее здесь больше нет). В этой системе нажатие на текст в специальном <span> вызовет функцию js, которая заменит текст на <input> поле. Текст, который был там, присваивается в качестве value элемента <input> .

Этому новому onblur полю присваивается <input> событие. Это вызывает функцию, которая обновляет данные в базе данных с помощью вызова AJAX. В рамках этого действия <input> поле заменяется новым значением (с тем же <span> содержимым), и событие onclick присваивается повторно. Таким образом, вы можете щелкнуть по тексту, изменить его, щелкнуть в другом месте, и он автоматически обновляется в базе данных. Затем вы можете сделать это снова, поскольку это динамически настраивает исходные события при каждом обновлении.

Я хочу получить доступ к этому <input> полю между первым событием и вторым. Я хочу добавить к нему jquery .datepicker() .

Как бы я поступил с вызовом .datepicker() динамически создаваемого элемента?

Комментарии:

1. Не могли бы вы просто обновить «функцию js, которая заменит текст на <input> «, чтобы также привязать указатель даты?

2. фактический код также помог бы…

3. @mu: оно используется повсеместно, во многих скриптах, для всех полей ввода текста. но я хочу использовать его только для одного, поэтому мне не нужна кнопка календаря после всех этих других полей ввода. все немного усложняет. тем не менее, хорошая идея.

Ответ №1:

Нет, события, подобного onCreate, не существует. Самое близкое, что вы можете найти, — это jQuery .live(). Это позволяет вам привязать событие к элементу сейчас или в будущем. Я также думаю, что это, вероятно, решит вашу проблему.

http://api.jquery.com/live/

 $('input').live('click', function() {
   $(this).datepicker();
});
  

Как удобно указал AutoSponge, live устарел начиная с jQuery 1.7. Вместо этого они предлагают использовать on или delegate .

http://api.jquery.com/on/

http://api.jquery.com/delegate/

Комментарии:

1. Но это, вероятно, не сработает, поскольку не похоже, что событие click будет инициировано для вновь созданного <input> . Хотя может быть событие фокусировки…

2. live устарел, используйте delegate.

3. @AutoSponge — спасибо. Похоже, что теперь нужно использовать On и Delegate.

4. @muistoosh short — согласился, что событие click, возможно, не самое лучшее для его случая, но поскольку delegate () может обрабатывать ряд событий, я подумал, что он мог бы выбрать то, которое лучше всего подходит для него. Или, возможно, программно инициировать событие.

5. @mrtsherman: На самом деле использование .delegate() по-прежнему предпочтительнее, чем .live() в случае более старых версий (где .on() оно недоступно). Это работает более точным способом.