Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.06.2017, 01:40
Интересующийся
Отправить личное сообщение для graf_vorontsov Посмотреть профиль Найти все сообщения от graf_vorontsov
 
Регистрация: 13.06.2017
Сообщений: 14

ajax + js.tooltip
есть файл index.php (в него приходит вся информация)
файл pcl_tooltip.js (это файл с кодом для всплывающих подсказок)
in-search.php (тут обрабатывается Ajax и формируется результат)

вобщем проблема в следующем - если подключить файл pcl_tooltip.js в index.php то результат в файле in-search.php его не видит
я думал что если результат выводится в файл index то скрипт должен подхватыватся

вопрос: как мне подключить файл js чтоб он работал при формировании результата?
Ответить с цитированием
  #2 (permalink)  
Старый 29.06.2017, 05:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от graf_vorontsov
если подключить файл pcl_tooltip.js в index.php то результат в файле in-search.php его не видит
А он ему и не обязательно нужен, это зависит от того, где окно требуют:

1) Индексный файл - подключение css/js и вывод. Если все запросы через него, то это вообще одно место (шаблон шапки), где будет подключение медиа ресурсов.

2) Если окно запрашивают в индексном файле, а файл обработчик ajax запросов, это in-search.php (адрес запроса), то достаточно подключения pcl_tooltip.js в индексном файле.

3) Если окно запрашивают в индексном файле, а файл обработчик ajax запросов, это in-search.php, но адресом запроса является также индексный файл, то достаточно подключения pcl_tooltip.js в индексном файле, и в нем же подключается search.php, но по наличию ajax запроса.

4) Если файл in-search.php он не только обрабатывает ajax запрос, но и формирует html-код страницы, на которой и запрашивается это окно, то pcl_tooltip.js обязательно должен подключатся при запросе этого файла. Адресом ajax запроса при этом будет текущий URL.

Так что разберитесь, что такое pcl_tooltip.js, где оно требуется и подключайте соответственно.
Ответить с цитированием
  #3 (permalink)  
Старый 29.06.2017, 10:55
Интересующийся
Отправить личное сообщение для graf_vorontsov Посмотреть профиль Найти все сообщения от graf_vorontsov
 
Регистрация: 13.06.2017
Сообщений: 14

index.php
<!DOCTYPE html>
<html>
<head>
	<title>Выбор марки и модели автомобиля</title>
	<!-- Подключаем библиотеку jQuery -->
	<script src="//libs.raltek.ru/libs/jquery/1.8.3/js/jquery-1.8.3.js"></script>
	<!-- Подключаем таблицу стилей -->
	<link rel="stylesheet" type="text/css" href="css/style.css" /> 
	<!-- Подключаем JavaScript-файл с нашим сценарием, который и будет получать данные об автомобилях -->
	<script src="js/custom.js"></script>
    <script src="js/table.js"></script>
	<script src="js/search.js"></script>
	<script src="js/pcl_tooltip.js"></script>
	
</head>
<body onload="PCL_TooltipInit();">
<div id="info" >
		
</div>
<span title="&lt;h1 style='margin:0px; padding:0px; text-align:center; color:#FF0000;'&gt;Я подсказка!&lt;/h1&gt;&lt;img src='example.gif' &gt;">Подсказка с HTML-кодом</span>
	
</body>
</html>

подключаю скрипт tooltips
Код:
<script src="js/pcl_tooltip.js"></script>
запускаю его
Код:
<body onload="PCL_TooltipInit();">
подсказка работает
Код:
<span title="&lt;h1 style='margin:0px; padding:0px; 
text-align:center; 
color:#FF0000;'&gt;Я подсказка!&lt;/h1&gt;&lt;img src='example.gif' &gt;">Подсказка с HTML-кодом</span>
но мне нужна подсказка в этом месте она попадает сюда после ajax из файла in-search.php
<div id="info" >
		
</div>


сюда текст попадает с этого файла in-search.php

<?php
include('db.php');
$searchq = $_GET['name'];
$amortizators = searchJoin($searchq);
//$amortizators = searchAjax($searchq);
//print_r ($amortizators);	
$getKurs = kurs();
$kurs = "";
foreach($getKurs AS $k){
	$kurs = $k['KURS_EURO'];
}
?>
<hr/>
	<div class="tbl-header">
		<table cellpadding="0" cellspacing="0" border="0">
			<thead>
				<tr>
					<th>AUTO</th><th>YEAR</th><th>RANGE</th><th>INSTALL</th><th>NUMBER</th><th>STATUS</th><th>PRICE, ГРН.</th>
				</tr>
			</thead>
		</table>
	</div>
	<div class="tbl-content" id="infox">
		<table>
			
			<?php foreach($amortizators as $amort): ?>                	
			<?php         
				$price = round($kurs * $amort['PRICE_EURO']);			
				if($amort['correction'] != ''){
					echo "<tr><td colspan='7'><hr /></td></tr>";
					echo "<tr><td>". ucfirst($amort['marka_name']). " " . ucfirst($amort['model_name']). "</br>".$amort['car_name'] ."</br>". $amort['correction']."</td><td>" 
					. $amort['year'] . "</td><td>" 
					. $amort['range_type'] . "</td><td>" 
					. $amort['install'] . "</td><td>" 
					. $amort['art_number']. "</td><td>"
					. $amort['status']. "</td><td>"
					. $price;
					}else{
					echo "<tr><td>". ucfirst($amort['marka_name']). " " . ucfirst($amort['model_name']). " ".$amort['car_name'] ."</td><td>" . 
					$amort['year'] . "</td><td>" 
					. $amort['range_type'] . "</td><td>" 
					. $amort['install'] . "</td><td>" 
					. $amort['art_number']. "</td><td>"
					. $amort['status']. "</td><td>"
					. $price;
				}
			?>	
		</td>
	</tr>
	
	<?php endforeach; ?>
</table>
<span title="&lt;h1 style='margin:0px; padding:0px; text-align:center; color:#FF0000;'&gt;Я тоже подсказка!&lt;/h1&gt;&lt;img src='example.gif' &gt;">Подсказка с HTML-кодом</span>
</div>


и тут подсказка уже не работает

я уже и так пробовал подгружать, и ничего не получилось
Код:
<script type="text/javascript">
		PCL_TooltipInit('infox');
	</script>
Ответить с цитированием
  #4 (permalink)  
Старый 29.06.2017, 11:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вопрос надо было ставить иначе и код вызывающий проблемы, а не ... У вас проблема в следующем - pcl_tooltip.js при загрузке страницы устанавливает подсказки на какие-то элементы. То что загружено Ajax, это динамическое добавление новых элементов в документ, на момент body onload их не было на странице, а значит и не будет у них подсказок.

Для того чтобы работало, нужно после получения ответа сервера и добавления его в документ заново инициализировать плагин. Если есть документация на него, читать, возможно у него есть метод для этого.
Ответить с цитированием
  #5 (permalink)  
Старый 29.06.2017, 12:08
Интересующийся
Отправить личное сообщение для graf_vorontsov Посмотреть профиль Найти все сообщения от graf_vorontsov
 
Регистрация: 13.06.2017
Сообщений: 14

да, есть метод
ну я его поидее и вызываю, но видимо не там где надо
есть метод PCL_TooltipUpdate()
и есть PCL_TooltipInit() (но PCL_TooltipUpdate() вызывается в нём)
попробовал вызывать PCL_TooltipUpdate() в конце </body>
Код:
<script type="text/javascript"> PCL_TooltipUpdate(); </script>
не работает

// Для каких элементов устанавливать подсказки
var tooltiptags = ['a', 'img', 'span'];

var tooltip_lehgth=0;
var show=false;

// Показать всплывающую подсказку
function PCL_TooltipShow(e) {
    // Получить событие
    var e = e ? e : window.event;

    var doc = document.documentElement;
    var body = document.body;

    // Получить текущие координаты мыши
    // Используется короткий метод определения IE от Gareth Heyes
    if ("\v" == "v") {
        var mouse_x = e.clientX;
        if (doc.clientLeft) { mouse_x -= doc.clientLeft; }
        if (doc && doc.scrollLeft) { mouse_x += doc.scrollLeft; }
        if (body && body.scrollLeft) { mouse_x += body.scrollLeft; }
        var mouse_y = e.clientY;
        if (doc.clientTop) { mouse_y -=doc.clientTop; }
        if (doc && doc.scrollTop) { mouse_y += doc.scrollTop; }
        if (body && body.scrollTop) { mouse_y += body.scrollTop; }
    }
    else {
        var mouse_x=e.pageX;
        var mouse_y=e.pageY;
    }

    var my_width = 0;
    var my_height = 0;

    // Получить размеры видимой области экрана
    if (typeof(window.innerWidth) == 'number') {
        my_width = window.innerWidth;
        my_height = window.innerHeight;
    }
    else if (doc && (doc.clientWidth || doc.clientHeight)) {
        my_width = doc.clientWidth;
        my_height = doc.clientHeight;
    }
    else if (body && (body.clientWidth || body.clientHeight)) {
        my_width = body.clientWidth;
        my_height = body.clientHeight;
    }

    var tmpdd = document.getElementById('tooltipdiv');
    var rr = document.getElementById('rulediv');

    // Если подсказка еще не показывается, то расчитать ее размеры
    if (!show) {
        // Если ширина "рулетки" больше заданного размера, то установить
        // ширину подсказки заданного размера, иначе установить ширину
        // "рулетки". Это устраняет искажение размера tooltip'а у края
        // экрана или в горизонтально прокрученной области.
        if (rr.offsetWidth>tooltip_lehgth) {
            // Скорректировать ширину подсказки, чтобы не было пустого места справа
            rr.style.width=tooltip_lehgth+'px';
            var old_rheight=rr.offsetHeight;
            var new_rwidth=tooltip_lehgth;
            while (true) {
                rr.style.width=new_rwidth+'px';
                if (rr.offsetHeight>old_rheight) {
                    new_rwidth++;
                    break;
                }
                new_rwidth--;
                if (new_rwidth==0) { break; }
            }
            if (new_rwidth==0) { new_rwidth=tooltip_lehgth; }
            tmpdd.style.width=new_rwidth+'px';
            tmpdd.style.whiteSpace='normal';
        }
        else {
            tmpdd.style.width='auto';
            tmpdd.style.whiteSpace='nowrap';
        }
    }

    // Относительное смещение по вертикали
    var scrollY = 0;
    if (doc && doc.scrollTop) {
        scrollY = doc.scrollTop;
    }
    else if (body && body.scrollTop) {
        scrollY = body.scrollTop;
    }
    else if (window.pageYOffset) {
        scrollY = window.pageYOffset;
    }
    else if (window.scrollY) {
        scrollY = window.scrollY;
    }

    // Относительное смещение по горизонтали
    var scrollX = 0;
    if (doc && doc.scrollLeft) {
        scrollX = doc.scrollLeft;
    }
    else if (body && body.scrollLeft) {
        scrollX = body.scrollLeft;
    }
    else if (window.pageXOffset) {
        scrollX = window.pageXOffset;
    }
    else if (window.scrollX) {
        scrollX = window.scrollX;
    }

    mouse_y-=scrollY;
    mouse_x-=scrollX;

    // Получить размеры tooltip'а
    var div_width = tmpdd.offsetWidth;
    var div_height = tmpdd.offsetHeight;
  
    // Расчитать новые координаты tooltip'а
    if (mouse_y+div_height+40>my_height) {
        var new_y = my_height-div_height-20;
    }
    else {
        var new_y = mouse_y+20;
    }
    if (mouse_x+div_width+40>my_width) {
        var new_x = my_width-div_width-20;
    }
    else {
        var new_x = mouse_x+20;
    }

    // Если подсказка получается поверх курсора, то сместить ее влево
    if (new_x<mouse_x && new_y<mouse_y) {
        var new_x = mouse_x-10-div_width;
    }
    
    with (tmpdd) {
        // Установить новые координаты tooltip'а
        style.left=(new_x+scrollX)+'px';
        style.top=(new_y+scrollY)+'px';
        // Убирает неприятное мерцание в Opera
        style.visibility = 'visible';
    }
    show=true;
}

// Обработчик наведения курсора мыши на элемент
function PCL_TooltipMouseOver(e) {
    var x = e.target ? e.target : e.srcElement;
    var tmpdd = document.getElementById('tooltipdiv');
    // Записать текст подсказки в основной и вспомогательный DIV
    do {
        var tmp=x.getAttribute('tooltip');
        if (typeof tmp=='string' && tmp!='') {
            tmpdd.innerHTML=tmp;
            break;
        }   
        else {
            x=x.parentNode;
            if (!x) { return false; }
        }
    } while (true);   
    
    var rr = document.getElementById('rulediv');
    rr.style.whiteSpace='normal';
    rr.style.width='auto';
    rr.innerHTML=tmpdd.innerHTML;
}

// Обработчик ухода курсора мыши с элемента
function PCL_TooltipMouseOut(e) {
    var tmpdd = document.getElementById('tooltipdiv');
    // Спрятать подсказку
    tmpdd.style.visibility = 'hidden';
    // Подсказка не показывается
    show=false;
}

// Обновление tooltip'ов на странице, например при первом вызове скрипта
// или после использования ваших функций AJAX
function PCL_TooltipUpdate() {
    for (var i=0; i<tooltiptags.length; i++) {
        var element = document.getElementsByTagName(tooltiptags[i]);
        for (var j=0; j<element.length; j++) {
            var x=element[j];
            // Если установлен атрибут alt или title, то установить наш обработчик
            if ((typeof(x.alt)=='string' && x.alt!='') ||
                (typeof(x.title)=='string' && x.title!='')) {
                // Создать дополнительный атрибут 'tooltip' и записать в него значение
                if (typeof(x.title)=='string' && x.title!='') {
                    x.setAttribute('tooltip',x.title);
                    x.tooltip=x.title;
                }
                else {
                    x.setAttribute('tooltip',x.alt);
                    x.tooltip=x.alt;
                }
                // Обнулить атрибуты alt и title, чтобы подсказка не дублировалась
                // штатными средствами браузера
                x.setAttribute('alt','');
                x.alt='';
                x.setAttribute('title','');
                x.title='';

                // Установить для элемента обработчики событий по наведению,
                // перемещению и уходу курсора мыши
                if (x.addEventListener) {
                    x.addEventListener("mouseover", PCL_TooltipMouseOver, false);
                    x.addEventListener("mousemove", PCL_TooltipShow, false);
                    x.addEventListener("mouseout", PCL_TooltipMouseOut, false);
                }
                else {
                    x.attachEvent("onmouseover", PCL_TooltipMouseOver);
                    x.attachEvent("onmousemove", PCL_TooltipShow);
                    x.attachEvent("onmouseout", PCL_TooltipMouseOut);
                }
            }
        }
    }
    // При обновлении и инициализации принудительно спрятать подсказку
    var tmpdd = document.getElementById('tooltipdiv');
    tmpdd.style.visibility = 'hidden';
}

// Инициализация скрипта. Эта функция должна вызываться по событию
// onload или находиться в самом конце страницы

function PCL_TooltipInit() {
    // Установить ширину подсказки, по умолчанию 300
    tooltip_lehgth=(typeof(arguments[0])!='number'?300:arguments[0]);
    if (tooltip_lehgth<10) { tooltip_lehgth=300; }

    var need_to_create = false;
    if (!(tooltipDiv=document.getElementById('tooltipdiv'))) {
        var tooltipDiv = document.createElement("DIV");
        need_to_create = true;
    }
    with (tooltipDiv) {
        setAttribute('id','tooltipdiv');
        className = 'tooltip';
        style.position = 'absolute';
        style.top='0px';
        style.left='0px';
        style.opacity = '.95';
        style.filter = "alpha(opacity:95)";
        style.zIndex=9999;
        style.visibility = 'hidden';

        innerHTML='&nbsp;';
    }
    
    if (need_to_create) {
        // Добавить на страницу плавающий DIV с подсказкой
        document.getElementsByTagName('body')[0].appendChild(tooltipDiv);
    }

    need_to_create = false;
    if (!(ruleDiv=document.getElementById('rulediv'))) {
        var ruleDiv = document.createElement("DIV");
        need_to_create = true;
    }
    with (ruleDiv) {
        setAttribute('id','rulediv');
        className = 'tooltip';
        style.position = 'absolute';
        style.zIndex=0;
        style.top='0px';
        style.left='0px';
        style.visibility = 'hidden';
        innerHTML='&nbsp;';
    }
    if (need_to_create) {
        // Добавить на страницу вспомогательный DIV для расчета нужного
        // размера окна подсказки
        document.getElementsByTagName('body')[0].appendChild(ruleDiv);
    }

    // Инициализировать tooltip'ы на странице
    PCL_TooltipUpdate();
}
Ответить с цитированием
  #6 (permalink)  
Старый 29.06.2017, 12:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

graf_vorontsov,
в Ajax и добавьте PCL_TooltipUpdate();
Ответить с цитированием
  #7 (permalink)  
Старый 29.06.2017, 12:30
Интересующийся
Отправить личное сообщение для graf_vorontsov Посмотреть профиль Найти все сообщения от graf_vorontsov
 
Регистрация: 13.06.2017
Сообщений: 14

ааа, супер
спасибо!
а его и добавлял сначала, только перед выдачей результата и ясно что не работало! Спасибо за помощь!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка формы после ajax проверки ShutTap Общие вопросы Javascript 15 08.04.2016 11:46
Объект ajax и приостановка функции kilohertz_. AJAX и COMET 5 18.01.2015 16:33
Проблема с AJAX Dim@ AJAX и COMET 4 16.09.2012 22:52
Ajax таблица gofkane Работа 1 26.09.2011 18:26
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57