У меня есть система, которую я изменяю, которая использует jquery 1.5.1, что означает .on
не существует.Jquery delegate/live не работает
У меня есть таблица, и в этой таблице у меня есть несколько ссылок, перечисленных в строке, и когда пользователь нажимает на нее, открывается всплывающее окно. У меня есть следующий код для создания всплывающей ссылки.
<tr>
<td class="view_detail_label">
</td>
<td>
@Html.ActionLink(
training.Name.Name,
"AddSurvey",
new
{
employeeId = Model.Id,
trainingId = training.Id
},
new
{
@class = "addSurvey"
}
)
<div class="result" style="display:none;"></div>
</td>
</tr>
В первой функции ниже я открыть всплывающее окно, и он прекрасно работает, за исключением, когда вы закроете всплывающее окно, вы не можете возобновить его по ссылке снова. Чтобы решить эту проблему, я подписал свое событие живым и использовал делегат и функцию live. Но при отслеживании его с консоли я не вижу никакого вывода из инструкции консоли: console.log($(this).next('.result'));
.
$('.addSurvey').click(function() {
$.ajax({
url: this.href,
type: 'GET',
cache: false,
context: this,
success: function (result) {
$(this).next('.result').html(result).dialog({
autoOpen: true,
title: 'Anket',
width: 500,
height: 'auto',
modal: true
}); //end of dialog
//console.log($(this).next('.result'));
} //enf of success function
}); //end of ajax call
return false;
});
$('a.addSurvey').live('click', function() {
$.ajax({
url: this.href,
type: 'GET',
cache: false,
context: this,
success: function (result) {
$(this).next('.result').html(result).dialog({
autoOpen: true,
title: 'Anket',
width: 500,
height: 'auto',
modal: true
}); //end of dialog
console.log($(this).next('.result'));
} //enf of success function
}); //end of ajax call
}); //end of live
Почему так я использовал метод делегата, и он тоже не работает. Мой делегат функции:
$(document).delegate(".addSurvey", "click", function() {
$.ajax({
url: this.href,
type: 'GET',
cache: false,
context: this,
success: function (result) {
$(this).next('.result').html(result).dialog({
autoOpen: true,
title: 'Anket',
width: 500,
height: 'auto',
modal: true
}); //end of dialog
console.log($(this).next('.result'));
} //enf of success function
}); //end of ajax call
});//end of delegate
Спасибо за вашу помощь.
* EDIT 1 После того, как вы открыли всплывающее окно, когда я нажимаю на него, он дублирует ответы, как только его щелкают дважды, и когда я обновляю страницу и нажимаю на нее, а затем закрываю ответы тройками. Что может вызвать эту неловкую ситуацию? * ** EDIT2 Я решил проблему выше, используя close: function() { console.log("onClose"); $('.surveyTable').load('Home/DetailsSurvey', {id:@Model.Id}); }
. При этом я перезагружаю таблицу div и могу щелкнуть любую всплывающую подсказку.
Вы проверили, был ли у вас активирован обратный вызов вашего успеха? Вы можете создать обратные вызовы 'error' или' complete', чтобы проверить это. – Vishal
В целом я сделал следующее; 'complete: function() {console.log ("Test");}'. Это записывает тест ответа на консоль каждый раз, когда я нажимаю на ссылку, и я сделал то же самое для ошибки, на которую он не дает ответа в консоли. Кажется, что работает – Eneramo