У мене є віджети, до яких додані керування javascript.
Якщо віджет присутній під час завантаження сторінки адміністратора віджетів, елементи керування працюють правильно.
Коли я додаю новий віджет, вони не працюють належним чином, я отримую розмітку, але жодні події JavaScript не набувають чинності.
Якщо я збережу новий віджет, коли форма перезавантажується, елементи керування створюються правильно і зараз працюють.
Оновлення сторінки також виправляє проблему, але лише для існуючих віджетів. Нові віджети все ще мають цю проблему.
Зокрема, у цих точках я вибираю selectize на вибраних входах:
- документ готовий
- Ajaxcomplete
Я перевірив, що мій код працює за кожною подією за бажанням, але результати не такі, як очікувалося.
Ось тестовий плагін, який демонструє проблему:
https://gist.github.com/Tarendai/8466299
Ви побачите, що у мене є лічильник, який збільшується з кожним елементом вибору, який він виявить, що він може конвертувати.
Примітки:
- Коли сторінка віджета завантажується, я бачу, як лічильник збільшується на консолі JS, як очікувалося
- Коли я додаю новий віджет, код запускається, однак він не зможе знайти жодних виділених елементів, на яких він може працювати, як показано found.length, що дорівнює 0. Це не повинно бути так, як повинен бути кожен новий віджет цього типу мають елемент вибору
- елементи вибору мають клас для їх ідентифікації, цей клас видаляється після застосування бібліотеки selectize для запобігання дублювання та повторної обробки на існуючих віджетах.
- До використання selectize я використовував Select2, який мав ту саму проблему
- Коментуючи код AJAX, я б очікував, що нові віджети матимуть стандартне введення. Вони не. Я не знаю, чому це так
Тож як зробити так, щоб керувати селектизацією роботу, не кажучи користувачеві оновити / натиснути зберегти до внесення змін?
jQuery( document ).ajaxStop( function() {
частину, щоб я міг ініціалізувати елементи керування у нещодавно завантажених віджетах. Однак якщо я видалюю цей рядок, я б очікував, що нові віджети матимуть стандартні HTML-вхідні дані, але вони не мають = s
widget-updated
та widget-added
події. Також я хочу підкреслити, що в коді @michaeljames використовується ідентифікатор елемента #widgets-right
. Обов’язково використовуйте його для націлювання на активні елементи віджетів всередині вашого JS-коду, інакше ви можете отримати повторювані елементи, оскільки ваш код також може вибрати приховані неактивні елементи віджетів у лівій частині екрана (і ті клонуються, коли додається віджет).
.on()
метод jQuerys . Що вимагає прив’язання події до документа. Однак яка подія буде доречною, я зараз не впевнений. Зрештою, це тому, що ваші оригінальні прив’язки являють собою початкову версію DOM, коли сторінка була завантажена, і здебільшого сліпі за новими елементами (вміст віджетів), які додаються через ajax. Сподіваюсь, це покаже вас у правильному напрямку, якщо ні, я можу відповісти краще, коли я на роботі.