У меня есть страница контакта на моем веб-сайте, где у меня есть различные ссылки в социальных сетях (плюс форма электронной почты) со ссылками сбоку, чтобы выбрать их. Щелчок по ссылке делает запрос ajax на сервер, а на успех заменяет html общего div с ответом.Загрузка сценариев динамического сценария первый раз, но не после этого
У каждого из них есть связанный с ним файл javascript, и это добавляется как тег сценария в заголовке документа на успех ajax.
Эти сценарии должны оценивать каждую нагрузку и подготавливать DOM в ответ. Тем не менее, я нахожу, что первый клик работает отлично, сценарий загружается и исполняется, но когда я иду, чтобы щелкнуть по другой ссылке, он загружает новый скрипт, но он никогда не работает. И ни один из этих динамически загружаемых скриптов не работает.
Аякса вызов для загрузки каждого варианта связан события нажатия каждой Линка здесь:
$('.socialLink').click(function() {
var id = $(this).prop('id').toLowerCase();
var callingObj = $(this);
$.ajax({
url: "./socialMedia/" + id + ".php",
success: function(msg) {
$('.socialLink').css('opacity', '0.4');
$('.socialLink').data('active', false);
callingObj.css('opacity', '0.9');
callingObj.data('active', true);
if ($('#Feed').css('display') !== 'none') {
$('#Feed').slideToggle(400, function() {
$('#Feed').html(msg);
});
}
else
{
$('#Feed').html(msg);
}
$('#Feed').slideToggle(400);
$.getScript('./script/' + id + '.js');
}
});
});
Дело в том, я динамически загружать скрипты для каждой страницы на сайте, тоже ... и не похоже, с этим связаны.
Вы можете увидеть страницу, о которой я говорю, если вы пойдете сюда http://www.luketimoth.me/contact.me. Только два варианта фактически загружают любой javascript на данный момент, электронную почту и твиттер ... остальные - это пустые js-файлы, содержащие только один комментарий внутри.
EDIT: Я использую jQuery getScript() ... Я изменил код выше, чтобы отразить это. Сценарии Я пытаюсь загрузить, которые не работают в качестве exepcted, являются:
twitter.js (только стандартный код твиттер дает вам одну из своих виджетов):
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.
js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
email.js:
$('#Send').click(function() {
var senderName = $('#YourName').val();
var senderEmail = $('#Email').val();
var emailSubject = $('#Subject').val();
var emailBody = $('#EmailBody').val();
$.ajax({
url:'./script/sendMail.php',
data: {
name: senderName,
email: senderEmail,
subject: emailSubject,
body: emailBody
},
type: "POST",
success: function(msg) {
$('#success').html(msg);
}
});
});
$('input, textarea').focus(function() {
if (this.value === this.defaultValue) {
this.value = '';
}
});
$('input, textarea').focusout(function() {
if (!this.value.length) {
this.value = this.defaultValue;
}
});
Вы используете jQuery ... почему бы вам не использовать '$ .getScript()'? http://api.jquery.com/jQuery.getScript/. Я не уверен, что это исправит что-нибудь, но вы могли бы также использовать библиотеку. – Ian
. С первого взгляда вы добавляете повторяющиеся элементы с одинаковым идентификатором. Кажется, вы должны заменить содержимое элемента, не добавляя новый, потенциально дублировать один. –
@Ian Использование $ .getScript() улучшает ситуацию, я могу щелкнуть по щебетать, получить скрипт, затем щелкнуть по электронной почте и получить его тоже, но если я щелкнув и вернусь назад, произойдет то же самое ... Сценарий не запускается, элементы DOM не являются «активными» (из-за отсутствия лучшего слова). EDIT: возможно, я говорил слишком рано. Кажется, нет никакой разницы. – Luke