ВОПРОС: Каков правильный способ использования .get() в сочетании с .one() (или .live()), чтобы добавить внешний php-файл только один раз?Использование .one() с .get()
ПОСЛЕДНИЙ EDIT: решение
<script>
$(document).ready(function(){
$('.tree li a').one("click", function() {
var currentAnchor = $('.tree li a').attr('href');
if(!currentAnchor){
var query = "page=1";
}
else
{
var splits = currentAnchor.substring(1).split('&');
//Get the section
var page = splits[0];
delete splits[0];
var query = "page=" + page;
alert ("page=" + page);
}
//Send the petition
$("#loading").show();
$.get("callbacks.php",query, function(data){
$("#content").append(data);
$("#loading").hide();
});
return false;
});
});
</script>
Более конкретно:
Я использую Javascript и PHP, чтобы загрузить некоторые внешние PHP-страницы в виде разделов в моем главном шаблоне.
Я использую переключатель и добавляет(), поэтому включенные файлы сохраняются. Мне нужно, чтобы каждый файл был добавлен ТОЛЬКО ОДИН РАЗ. Вот сценарий, как хотелось бы, чтобы это произошло
1) загрузки нажата ссылка
2) downloads.php появляется
3) ошибки нажатия на ссылку
4) ошибки. PHP появляется ниже downloads.php
5) загрузок нажатия на ссылку снова
6) страница просто прокручивается до верхней downloads.php
Мне нужна такая же функциональность, как в примере на documentation page .one(), где каждый div можно щелкнуть только один раз.
Я также посмотрел Using .one() with .live() jQuery, и мне особенно понравился подход, используемый в принятом ответе.
Iried с использованием булевского флага, как предлагается ниже, но все, что он сделал, ограничивал мои последовательные клики по одной и той же ссылке на одну. Поэтому, если я нажму один link 1
несколько раз, он покажет страницу 1.php только один раз, но если я нажму ссылку 1, тогда ссылка 2, а затем ссылка 1 снова отобразит страницу 1.php, затем добавит страницу 2.php и добавит другая страница 1.php.
Я начинаю думать, что setInterval ошибочен, и я могу использовать .one() для всей функции checkAnchor()
и привязать ее к тегам <a>
. Я попытался это, но он не работает либо: (((
core.js - с помощью .one()
var currentAnchor = null;
//$(document).ready(checkAnchor);
//Function which chek if there are anchor changes, if there are, sends the ajax petition checkAnchor
$("a").one("click", function(){
//Check if it has changes
if(currentAnchor != document.location.hash){
currentAnchor = document.location.hash;
//if there is not anchor, the loads the default section
if(!currentAnchor){
query = "page=1";
}
else
{
//Creates the string callback. This converts the url URL/#main&id=2 in URL/?section=main&id=2
var splits = currentAnchor.substring(1).split('&');
//Get the section
var page = splits[0];
delete splits[0];
var query = "page=" + page;
}
alert ("hello");
//Send the petition
$("#loading").show();
$.get("callbacks.php",query, function(data){
$("#content").append(data);
$("#loading").hide();
});
}
});
Другая вещь, которую я любил, как подход добавляет имена страниц массив, а затем проверку этого массива, чтобы убедиться, что страница еще не отображается. Мне удалось заполнить массив именами страниц, используя .push(), но я зашел в тупик, когда искал значение в нем. у вас есть идея, как это должно выглядеть так, что было бы очень полезно.
core.js
///On load page
var contentLoaded;
$().ready(function(){
contentLoaded = false;
setInterval("checkAnchor()", 300);
alert (contentLoaded);
});
var currentAnchor = null;
//Function which chek if there are anchor changes, if there are, sends the ajax petition
function checkAnchor(){
//Check if it has changes
if(currentAnchor != document.location.hash){
currentAnchor = document.location.hash;
//if there is not anchor, the loads the default section
if(!currentAnchor){
query = "page=1";
}
else
{
//Creates the string callback. This converts the url URL/#main&id=2 in URL/?section=main&id=2
var splits = currentAnchor.substring(1).split('&');
//Get the section
var page = splits[0];
delete splits[0];
var query = "page=" + page;
}
alert ("hello");
//Send the petition
$("#loading").show();
alert (contentLoaded);
if (!contentLoaded){
$.get("callbacks.php",query, function(data){
$("#content").append(data);
$("#loading").hide();
});
alert (contentLoaded);
}
contentLoaded = true;
}
}
вот мой
обратных вызовов.PHP
<?php
//Captures the petition and load the suitable section
switch($_GET['page']){
case "4100errors" :
include 'template/4100errors.php';
break;
case "4100downloads" :
include 'template/4100downloads.php';
break;
}
?>
И мой главный файл
4100.php
<?php
include 'template/header.php';
include 'template/4100menu.php';
include 'template/log.php';
include 'template/links.php';
include 'template/4100breadcrumbs.php';
?>
<div class="left-widget">
<div style="display:none; position:absolute; top:-9999; z-index:-100;">
<a href="4100.php?page=4100downloads"></a>
<a href="4100.php?page=4100errors"></a>
</div>
<div id="side-nav-bar" class="Mwidget">
<h3>Contents</h3>
<ul class="tree">
<li><a href="#4100downloads" class="links" >Downloads</a> </li>
<li><a href="#4100errors" class="links">Error Troubleshooting</a></li>
</ul>
</div>
</div>
<div id="content" style="margin-top:100px; margin-left:300px;">
<?
switch ($_GET['page'])
{
case "4100downloads": include 'template/4100downloads.php'; break;
case "4100errors": include 'template/4100errors.php'; break;
}
?>
</div>
</body>
</html>
4100dowloads.php
Downloads test page
4100error.php
Errors test page
Также вы можете посмотреть на тестовой странице здесь http://period3designs.com/phptest/1/4100.php
Не могли бы вы пояснить, что конкретно задается здесь? –
Посмотрите на обновление выше. Я искренне надеюсь, что это станет более ясным. –