#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(). Это позволяет вам привязать событие к элементу сейчас или в будущем. Я также думаю, что это, вероятно, решит вашу проблему.
$('input').live('click', function() {
$(this).datepicker();
});
Как удобно указал AutoSponge, live устарел начиная с jQuery 1.7. Вместо этого они предлагают использовать on или delegate .
Комментарии:
1. Но это, вероятно, не сработает, поскольку не похоже, что событие click будет инициировано для вновь созданного
<input>
. Хотя может быть событие фокусировки…2. live устарел, используйте delegate.
3. @AutoSponge — спасибо. Похоже, что теперь нужно использовать On и Delegate.
4. @muistoosh short — согласился, что событие click, возможно, не самое лучшее для его случая, но поскольку delegate () может обрабатывать ряд событий, я подумал, что он мог бы выбрать то, которое лучше всего подходит для него. Или, возможно, программно инициировать событие.
5. @mrtsherman: На самом деле использование
.delegate()
по-прежнему предпочтительнее, чем.live()
в случае более старых версий (где.on()
оно недоступно). Это работает более точным способом.