2013-08-05 2 views
1

У меня есть страница контакта на моем веб-сайте, где у меня есть различные ссылки в социальных сетях (плюс форма электронной почты) со ссылками сбоку, чтобы выбрать их. Щелчок по ссылке делает запрос 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; 
    } 
}); 
+3

Вы используете jQuery ... почему бы вам не использовать '$ .getScript()'? http://api.jquery.com/jQuery.getScript/. Я не уверен, что это исправит что-нибудь, но вы могли бы также использовать библиотеку. – Ian

+0

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

+0

@Ian Использование $ .getScript() улучшает ситуацию, я могу щелкнуть по щебетать, получить скрипт, затем щелкнуть по электронной почте и получить его тоже, но если я щелкнув и вернусь назад, произойдет то же самое ... Сценарий не запускается, элементы DOM не являются «активными» (из-за отсутствия лучшего слова). EDIT: возможно, я говорил слишком рано. Кажется, нет никакой разницы. – Luke

ответ

0

Спасибо за все замечания и предложения. Я решил, в конце концов, загрузить все в фоновом режиме, а не делать ajax-запрос каждый раз.

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

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