2013-07-09 4 views
0

У меня есть динамически созданный список с данными json. Итак, мой вопрос в том, как получить индекс щелкнутого элемента.Индекс динамически созданного списка Javascript

Я попытался это:

$("li").click(function() { 
     var index = $("li").index(this); 
     alert(index); }); 

Но это не работало. Я не получаю предупреждение? Если я создаю некоторые статические элементы Li, я получаю их индекс.

Пожалуйста, помогите мне:/

ответ

2

Динамически созданные списки будут требовать делегированных событий ...

$("ul").on("click", "li", function() { 
     var index = $(this).index(); 
     alert(index); 
}); 

Если <ul> также создаются динамически, пожалуйста, выберите родительский узел, который существует до того, как список будет создан.

+0

Прекрасно работает :)) U мне очень помогает. Thanks –

+0

Без проблем, рад помочь! – DevlshOne

+0

@ user2561004 Если вы удовлетворены этим ответом, отметьте его соответствующим образом. Благодарю. – DevlshOne

-1

Это

$("li").click(function() { 
     var index = $(this).index(); 
     alert(index); 
}); 
+0

Его проблема напрямую связана с динамическим созданием элементов LI, а не значение индекса. – DevlshOne

+0

Как можно догадаться? Я не рекомендую жить событиям как решение по умолчанию для любой проблемы, и есть более чем один способ добавить обработчики к динамически созданным спискам. – FloydThreepwood

+0

Его сообщение содержит заявление ** Но это не сработало. Я не получаю предупреждение? Если я создаю некоторые статические элементы Li, я получаю их индекс. ** Никаких угадываний. – DevlshOne

1

Два вопроса:

  1. Вы просто хотите $(this).index():

    $("li").click(function() { 
        var index = $(this).index(); 
        alert(index); }); 
    

    От the documentation:

    Если аргумент не передается методу .index(), возвращаемое значение представляет собой целое число, указывающее положение первого элемента внутри JQuery объекта относительно его родственных элементов.

  2. Когда вы $("li").click(...), перехватывает его на элементы, которые существуют в данный момент времени. Добавленные вами позже не получат назначенный им обработчик кликов. Лучший способ приблизиться к динамическим спискам, как это, обычно делегирование событий. DevlshOne дает вам пример in his/her answer. Основная идея заключается в следующем:

    $("selector for the list, not the list items").on("click", "li", function() { 
        // handler code here 
    }); 
    

    Это крючки click на списке, а не элементы списка, а затем запускает обработчик, когда щелчок происходит, как если бы вы имели крючковатый нажмите на обработчик.

+1

Его проблема напрямую связана с динамическим созданием элементов LI, а не с индексом. – DevlshOne

+0

А, это обработчик, я понимаю, что вы говорите, спасибо. –

+0

Его сообщение содержит заявление ** Но это не сработало. Я не получаю предупреждение? Если я создаю какие-то статические элементы Li, я получаю их индекс. ** – DevlshOne

0

Попробуйте следующее. что ul не загружается динамически.

$("ul.containerclass").on("click", "li", function() 
{ 
    var index = $(this).index(); 
    alert(index); 
}); 

или

$(document).on("click", ".containerclass li", function() { 
    var index = $(this).index(); 
    alert(index); 
}); 

Примечание: здесь containerclass может быть ID

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