Примечание: У меня есть обходной путь к этой проблеме, но я бы предпочел, чтобы запятая разделила значения, как я опишу ниже, а не разделяю их с пробелами (это то, что мое обходное решение делает).jQuery обрезать и удалить родительские прерывания дочерних событий
У меня есть сайт ASP.NET, который позволяет преподавателям выбирать из списка DropDownList из предустановленных комментариев и применять эти комментарии для учащихся в своих классах. Я показываю учеников и комментарии внутри GridView и использую Label для отображения любых комментариев, которые уже существуют в базе данных (удаляя их из DropDownList в процессе). Когда инструктор выбирает один из этих комментариев и нажимает на кнопку, моя функция JQuery:
- Тянет выбранное значение и текст из варианта (при условии, что это не по умолчанию).
- Проверяет длину метки Label.children() и добавляет «,» к тексту, если он больше нуля.
- Создает тэг
<span>
со скрытым полем, содержащим значение и текст. - Добавляет текст внутри пролета.
- Закрывает пролет.
- Прикрепляет событие onclick к проему.
- Удаляет исходный вариант из списка DropDownList.
Событие onclick тега span делает обратное тому, что я опишу выше, - оно вытягивает значение и текст и заново создает параметр в раскрывающемся меню. Кроме того, он заменяет строки, такие как «,», «» в родительской метке. Я обнаружил, что когда я заменяю эти строки (которые лежат вне промежутков, на которые я привязывал события onclick), события onclick исчезают.
Я знаком с .live(), но поскольку каждая строка в этом GridView содержит уникальную ссылку на конкретный учащийся и класс, используемые в данный момент, я не могу знать значения, которые каждая строка должна передавать в funciton раньше времени. Есть ли какое-либо решение этой проблемы, кроме описанного выше, или повторного присоединения события onclick?
Мне нравится эта идея. Конечно, проще, чем мой метод синтаксического разбора. Тем не менее, я действительно удивляюсь, почему удаление текста из родительского сломало дочерние события. – jwiscarson
Трудно сказать точно, не видя своего кода. Я предполагаю, что некоторые аспекты того, что вы делали, это уничтожение и воссоздание элементов DOM и, таким образом, удаление привязки события. – Ender
С риском смятия себя из-за публикации ужасного jQuery, вот вы: function DeselectComment (studentSid, value) { if (destinationDropDown.children().length == 1) { destinationDropDown .append ('<значение опции =' + значение + '>' + sourceSpan.text() + ''); var parentSpan = sourceSpan.parent(); источникSpan.remove(); if (parentSpan.text(). Search (',') == 0) { parentSpan.html (parentSpan.html(). Replace (',', '')); } parentSpan.html (parentSpan.html(). Replace (',,', ',')); } – jwiscarson