Я разрабатываю веб-приложение в asp.net. Я добавляю/добавляю msgs в # message-list программно с помощью jquery. Он отображает все, но я хочу показать div, текущий справа, когда нажимается msg. Я добавил событие.click, но оно не работает. Странно то, что когда я вставляю статический/ручной html-код и комментирую часть jquery, добавляющую html программно, щелчок отлично работает, я не знаю, где проблема. Кроме того, в хром-консоли нет ошибки. Незлая помощь. Мой код ниже.
Мой html-код
<ul id="messages-list">
</ul>
<div id="MessagePane" style="height: 666px; display: none;">
<div class="inner-pane">
<div style="overflow: hidden;">
<a href="#" class="floatleft next-step message-close" data-pane="MessagePane">Close</a>
<a class="floatright" id="message-detail-date">July 9, 2013</a>
</div>
<div class="clear"></div>
<h4 id="message-detail-title">Important Message: Pinapple Shortage</h4>
<p id="message-detail-content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla fermentum ornare dui sed commodo. Class aptent taciti sociosqu ad litora torquent. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla fermentum ornare dui sed commodo. Class aptent taciti sociosqu ad litora torquent. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla fermentum ornare dui sed commodo. Class aptent taciti sociosqu ad litora torquent. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla fermentum ornare dui sed commodo. Class aptent taciti sociosqu ad litora torquent.<br>
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla fermentum ornare dui sed commodo. Class aptent taciti sociosqu ad litora torquent.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla fermentum ornare dui sed commodo. Class aptent taciti sociosqu ad litora torquent.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla fermentum ornare dui sed commodo. Class aptent taciti sociosqu ad litora torquent.
</p>
</div>
</div>
Моя часть javascript/jquery
$("ul#messages-list").append('<li><a href="#" class="arrow-list message" data-pane="MessagePane"><div><div msgggggg</div></a></li>');
$('.arrow-list.message').click(function () {
alert('dsad');
$(this).parent().siblings().find('a').removeClass('transparent');
$(this).addClass('transparent');
var height = $('#body_inner').outerHeight();
if ($('#' + $(this).data('pane')).is(":visible")) {
$('#' + $(this).data('pane')).hide('slide', {
direction: 'right'
}, 300).css('height', height).show('slide', {
direction: 'right'
}, 500);
} else {
$('#' + $(this).data('pane')).css('height', height).show('slide', {
direction: 'right'
}, 500);
}
});
$('.message-close').click(function () {
$('.message').removeClass('transparent')
$('#' + $(this).data('pane')).hide('slide', {
direction: 'right'
}, 500);
});
Так как. Элемент arrow-list.message
создается динамически, вам нужно использовать делегирование событий для регистрации обработчиков событий для этих элементов.
Когда вы используете $('.arrow-list.message').click(....);
чтобы зарегистрировать обработчик событий, он зарегистрирует дескриптор только тех элементов, которые уже присутствуют в dom во время выполнения кода, в вашем случае, поскольку эти элементы создаются после этого, обработчики не будут привязаны к вновь созданным элементам
Попробуйте с этим
$(document).on('click','.arrow-list.message',function () {
alert('dsad');
$(this).parent().siblings().find('a').removeClass('transparent');
$(this).addClass('transparent');
var height = $('#body_inner').outerHeight();
if ($('#' + $(this).data('pane')).is(":visible")) {
$('#' + $(this).data('pane')).hide('slide', {
direction: 'right'
}, 300).css('height', height).show('slide', {
direction: 'right'
}, 500);
} else {
$('#' + $(this).data('pane')).css('height', height).show('slide', {
direction: 'right'
}, 500);
}
});
$(document).on('click','.message-close',function () {
$('.message').removeClass('transparent')
$('#' + $(this).data('pane')).hide('slide', {
direction: 'right'
}, 500);
});
использование on
методу:
$(document).on('click','.arrow-list.message', function() {...
попробуйте это тоже..
$(function(){
$('.arrow-list.message').click(function () {
});
$('.message-close').click(function () {
});
});
использовать Jquery Live click
$ ('document'). live ('click', function {...});
.live
устарел с .live
времен и больше не существует с jQuery 1.9.