#jquery #ajax #refresh
#jquery #ajax #обновить
Вопрос:
Я имею дело с этой проблемой. Я запускаю несколько скриптов jQuery на своей странице, и это работает нормально. Проблема возникает, когда я хочу применить эти скрипты к контенту, который вызывается AJAX.
Я создал пример кода, который демонстрирует проблему. Он состоит из 3 файлов — index.html , target.html и main.js
Index.html (только <body>
)
<body>
<script type='text/javascript' src='main.js'></script>
<div id='main'>
<button>Call Ajax</button>
<br /><br />
<a href='index.html?clicked=1'>Some link</a>
</div>
<div id='target'></div>
</body>
Target.html
<a href='index.html?clicked=1'>Some link 2</a>
Main.js
$(document).ready(function() {
$('a').live("click", function() {
if(!confirm('Are you sure?'))
return false
});
$('button').click(function() {
$.post('target.html', function(data) {
$('#target').html(data);
});
});
});
Итак, допустим, я хочу, чтобы пользователь подтверждал каждый раз, когда он нажимал на <a>
тег. Я нажимаю на тег внутри #main <div>
, и он работает нормально. Я нажимаю кнопку «Вызвать ajax», появляется ссылка, я нажимаю на нее, и подтверждение не отображается.
Итак, я подумал, что поместил <script type='text/javascript' src='main.js'></script>
внутрь target.html файл.
Это работает нормально, вплоть до того момента, когда я снова нажимаю на первую ссылку (внутри #main div). Чем подтверждение отображается 2 раза, вместо одного.
Я нашел в Интернете, что некоторые люди справляются с этим, используя .live()
метод или $(document).ajaxComplete(function(){
, но я не смог запустить его.
Кто-нибудь может предоставить рабочее решение? Спасибо, Майк.
Ответ №1:
не удалось запустить его — плохое оправдание. вы, безусловно, можете запустить его и должны, поскольку это правильный способ сделать это.
попробуйте это:
var confirmFn = function() {
if(!confirm('Are you sure?'))
return false
}
$('a').click(confirmFn);
$('#target').delegate("a", "click", confirmFn);
$('button').click(function() {
$.post('target.html', function(data) {
$('#target').html(data);
});
});
Ответ №2:
Вы пробовали повторно привязывать обработчик кликов при загрузке дополнительного файла?
var f;
$(document).ready(function() {
$('a').live("click", f=function() {
if(!confirm("Are you sure?")) return false;
});
$('button').click(function() {
$.post('target.html', function(data) {
$('#target').html(data);
$('a').unbind("click").live("click", f);
});
});
});
Кроме того, я бы проверил консоль на наличие ошибок.