Код JQuery внутри клонированного элемента связан неправильно [дубликат]

В EL обычно не применяется, но вместо этого используется только SpEL (Spring EL) (протестировано с 3.2.2.RELEASE на Tomcat 7). Я думаю, что стоит упомянуть об этом здесь, если кто-то ищет JSP и EL (но использует JSP с Spring).

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<spring:eval var="constant" expression="T(com.example.Constants).CONSTANT"/>
6
задан mckeegan375 1 December 2012 в 23:40
поделиться

3 ответа

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

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

var $table;
$(function() {
     $table=$('#myTable'); 
     var $existRow=$table.find('tr').eq(1);
      /* bind to existing elements on page load*/
      bindAutoComplete($existRow);
});

function addRow(){
    var $row=$table.find('tr:last').clone(true);
    var $input=$row.find('input').val("");
    $table.append($row);
    bindAutoComplete($row );
    $input.focus();

}


function bindAutoComplete($row ){
    /* use row as main element to save traversing back up from input*/
    $row.find(".product_title").autocomplete(products, {
        width: 380,
        matchContains: "word",
        formatItem: function(row) {
            return row.title;
        }
    });
    $row.find('.product_title').result(function(event, data) {
        $row.find('.product_description').val(data.description);
    });
}
5
ответ дан charlietfl 19 August 2018 в 04:37
поделиться
  • 1
    Привет, Charlietfl. Спасибо вам за подробный ответ, это очень помогло мне! Я изменил свои поля ввода, чтобы иметь класс = & quot; product_title & quot; и class = "product_description", и я также изменил свой код на ваш выше. AutoComplete теперь работает во всех новых добавленных полях, однако единственная проблема заключается в том, что описание продукта изменяется во всех строках, когда я печатаю заголовок продукта во вновь добавленной строке. Вы знаете, что может быть причиной этого? Еще раз спасибо! – mckeegan375 2 December 2012 в 00:36

Сообщение Charlietfl решило мою проблему, единственное изменение, которое я должен был сделать, заключалось в замене:

var $row=$table.find('tr:last').clone(true);

с

var $row=$table.find('tr:last').clone(); удалением true.

Надеюсь, это поможет кому-то еще:)

1
ответ дан Irvin Dominin 19 August 2018 в 04:37
поделиться

Я думаю, проблема в том, что с clone() вы клонируете элемент, у которого уже есть свойства автозаполнения, а затем автозаполнение не может добавить «снова» к новому элементу. Я думаю, вы не должны clone(), вы должны использовать исходный HTML-код элемента и вставить его.

EDIT:

Как я его исправил:

  1. autocomplete("destroy") для исходного поля ввода, которое вы хотели бы клонировать.
  2. Клонировать свой элемент и добавить к нему автозаполнение

И не выполнять используйте clone(true), но вы можете использовать clone()

1
ответ дан mheg 19 August 2018 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: