Я использую кусок JS дважды для двух разных, но одинаковых событий.
Чтобы было проще, скажем, у меня есть:
<script type="text/javascript">
$(function(){
$(".iframe").load(function(){
$(this).contents().find("form").delegate(".clickThisCheckBox","click",function(){
alert(this)
})
})
})
</script>
<div class="tabs">
<ul class="tabs-nav">
<li><a href="#products">Products</a></li>
<li><a href="#accessories">Accessories</a></li>
</ul>
</div>
<div class="content">
<div id="products">
<iframe class="iframe">
<form action="?" method="post">
<input type="checkbox" name="checkBox1" class="clickThisCheckBox" />
</form>
</iframe>
</div>
<div id="accessories">
<iframe class="iframe">
<form action="?" method="post">
<input type="checkbox" name="checkBox2" class="clickThisCheckBox" />
</form>
</iframe>
</div>
</div>
Это более упрощенная версия, чем у меня, но точно такая же концепция.
Поэтому, когда страница загружается, вы нажимаете флажок на открытой вкладке, и вы успешно получаете окно предупреждения с объектом. Когда вы нажимаете следующую вкладку и пытаетесь установить флажок, ничего не происходит.
AJAX или отдельная загрузка не выполняются. Все отображается при начальной загрузке страницы. Оба фрейма загружаются одновременно, и вы получаете доступ к другому файлу один раз, переключаясь на другую вкладку.
Должен ли JS быть в функции и запускаться при каждом нажатии на вкладку? Кажется, я не могу обхватить это пальцем.
Обновление : оно сводится к тому, что JS запускается только один раз, поэтому только первый iFrame на первой вкладке получает все правильные переменные и события, связанные с элементами.
Обновление : Похоже, понял это. Продолжая использовать iFrames, мне пришлось бросить все свои JS в функцию и запустить ее на $(".iframe").load()
, и всякий раз, когда нажимается новая вкладка, например, $(".nav-cont li a").bind("click",function(){ //run the javascript })