2016-10-06 4 views
0

Мне нужно вернуть атрибут placeholder обратно в IE8. Я традиционно нашел этот сценарий будет отлично для этого:Привязка скрипта к динамически созданным элементам

https://github.com/parndt/jquery-html5-placeholder-shim/blob/master/jquery.html5-placeholder-shim.js

Однако это не связывается с динамически создаваемые элементы. Поэтому, если новый ввод добавляется на страницу с помощью JS, то заполнитель не будет работать.

Есть ли способ применить этот скрипт к динамически созданным элементам?

ответ

1

В принципе .. Нет.

Как и большинство плагинов (которые не основаны строго на событиях), вам необходимо инициализировать плагин для новых элементов после их создания.

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

1

ли вызов jQuery.placeholder.shim(); работы? Это метод, который называется ready/load, поэтому может сделать трюк.

Если это не так, вы, вероятно, не можете, по крайней мере, не напрямую использовать этот конкретный плагин в его текущей форме. Вы можете изменить исходный код для его обработки.

Являются ли они динамически генерируемыми при загрузке страницы? Не могли бы вы просто отложить загрузку плагина до тех пор, пока эти элементы не будут сгенерированы?

Единственный другой длинный выстрел, который у меня есть, может ли вы включить плагин в функцию и вызвать его после создания каждого входа? Это может иметь непреднамеренные побочные эффекты, но может быть дешевой и противной альтернативой.

+0

Да, глядя на источник дальше, метод прокладки выглядит лучше всего. Он готовит объект конфигурации, который затем передается в $ .fn._placeholder_shim, который, в свою очередь, выполняет все тяжелые операции. Возможно, вы сможете передать метод shim() объект конфигурации, указав селектор, чтобы нацелить только новые элементы, т.е. jQuery.placeholder.shim ({selector: 'input # newElement1'}); – Brian

+0

ничего противного о последней идее ... это было сделано в течение многих лет. Легко добавить класс к тем, которые уже были настроены, и отфильтровать их, используя not() – charlietfl

+0

Nah Я имел в виду вызывать весь плагин повторно, а не только метод, который создает экземпляр. Если он выполняет итерацию по каждому входу на странице и не принимает селектор, тогда вы получите такие вещи, как дубликаты обработчиков событий и другие беспорядки, примените его к динамическому генерированию большого количества входов, тогда вы сможете быстро достичь производительности вопросы. В тот момент, когда я написал, что я не заметил метод «shim» только метода jQuery.fn._placeholder_shim, который не работает, если вы вызываете его через $ ('selector') ._ placeholder-shim(), поскольку для этого требуется config. – Brian

Смежные вопросы