2014-01-20 6 views
0

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

Это мой метод:

 function getDesks(coordsArr) { 
      for (var i = 0; i < coordsArr.length; i++) { 
       var element = $("<a href='' class='deskBtn' data-name='" + coordsArr[i].UserName + "'>.</a>"); 
       $(element).css({ 
        "top": coordsArr[i].DeskYCoord, 
        "left": coordsArr[i].DeskXCoord 
       }).appendTo(".map"); 
      } 
     } 

Проблема у меня в том, где поместить следующее событие Ajax щелчка.

$('.deskBtn').on('click', function() { 
       var user = $(this).attr("data-name"); 
       console.log(user); 

       $.ajax({ 
        url: "/Home/GetUserData", 
        type: "GET", 
        data: {user: user}, 
        success: function (data) { 

        } 
       }); 
      }); 

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

+0

'.on()' * * должны быть присоединены к родительскому контейнеру, динамически добавляемых событий. Например: '$ (" # container "). On ('click', '.deskBtn', function() {});' –

+0

Вы также можете создать элемент с событием: 'var $ el = $ (' ', {class:' deskBtn ', click: function() {}}) ' – elclanrs

ответ

1

Почему вы не можете добавить обработчик внутри цикла for?

$(element).on('click', function() { ... }) 
+0

Привет, Джаред, я добавил событие click внутри цикла, но когда я нажимаю на одну из ссылок, пользовательские данные отображаются, он быстро исчезает, и вызов ajax никогда не выполняется. – gb1986

+1

вы должны добавить 'return false;' непосредственно перед закрытием функции. В противном случае браузер попытается выполнить ссылку «href», которая в этом случае оставлена ​​пустой, означает попытку снова загрузить тот же URL-адрес страницы. Если бы вы изменили 'href = ''' на 'href = '#'', вы найдете пожары '$ .ajax'. –

+0

Работает отлично! Благодарю. – gb1986

0

Делите событие на статический элемент. Сделайте это для body:

$('body').on('click', '.deskBtn', function() { 

    var user = $(this).attr("data-name"); 
    console.log(user); 

    $.ajax({ 
     url: "/Home/GetUserData", 
     type: "GET", 
     data: {user: user}, 
     success: function (data) { 

     } 
    }); 
}); 
0

Вы должны попробовать с живой

$(document).ready(function(){ 
    $('.deskBtn').live('click', function(){ 

    }); 
}); 
+0

хорошая мысль, хотя '.live()' устарела и заменена на .on() 'с 1.7 http://api.jquery.com/live/ –

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