01.05.2022, 05:41
|
Профессор
|
|
Регистрация: 08.05.2017
Сообщений: 178
|
|
рони,
В моём коде встретился вызов Ajax вида:
$("#consult").load("{:url('consult.html',['goods_id'=>$goods.goods_id])}", function(){
// Membership card
$(this).find('[dstype="mcard"]').membershipCard({type:'shop'});
});
В вызываемом файле consult.html, есть
<a href="javascript:void(0)" target="_blank" data-param="{'id':{$buyer_id}}" dstype="mcard">{$buyer_name}</a>
Как с помощью вашего скрипта передать параметры в файл consult.html, при его вызове?
|
|
01.05.2022, 07:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Vaska,
вместо $(div).load(url); будет
if(url.includes('consult.html')) $(div).load("{:url('consult.html',['goods_id'=>$goods.goods_id])}", function(){
// Membership card
$(this).find('[dstype="mcard"]').membershipCard({type:'shop'});
});
else $(div).load(url);
|
|
01.05.2022, 08:04
|
Профессор
|
|
Регистрация: 08.05.2017
Сообщений: 178
|
|
У меня браузеры ругаются на кавычки в этой строке:
setTimeout(_=> div.style.backgroundImage = `url(${url})`, 600)//имитация грузим контент с сервера
Uncaught SyntaxError: `` literal not terminated before end of script
|
|
01.05.2022, 08:16
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Vaska,
заменил кавычки на обычные
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
header {
background: cyan;
min-height: 100px;
}
.content_container {
background: rgba(255, 0, 0, 0.3);
padding: 20px;
}
.inner-content {
height: 400px;
margin: 5px;
background: red;
overflow: scroll;
background-repeat: no-repeat;
background-size: cover;
}
footer {
background: cyan;
min-height: 500px;
}
</style>
<title></title>
</head>
<body>
<header>
<div>
other content
</div>
<p>text two</p>
<script>
let r = 1;
function addDiv()
{
document.querySelector('#haupt .content_container').insertAdjacentHTML('beforeend', '<div class="inner-content" data-url="https://picsum.photos/300/100?' + (r++) +'"></div>');
}
</script>
<input name="" type="button" value="addDiv" onclick="addDiv()" >
</header>
<div id="haupt">
<div id="acidhaupt" class="haupt-wrap background-color">
<div class="content_container">
</div>
</div>
</div>
<footer>
<p>footer content</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const lazyShow = divs => {
divs.forEach(e => {
if (e.intersectionRatio < .3) return;
let div = e.target,
url = div.dataset.url;
setTimeout(_=> div.style.backgroundImage = 'url('+url+')', 600)//имитация грузим контент с сервера
observer.unobserve(div);
});
};
let observer = new IntersectionObserver(lazyShow, {
rootMargin: "10px",
threshold: [.3]
});
let parent = document.querySelector('#haupt');
const add = () => parent.querySelectorAll('.inner-content:not(.load)').forEach(div => {
observer.observe(div);
div.classList.add('load');
});
add();
let listObserver = new MutationObserver(add); //отслеживание появления новых блоков .inner-content в #haupt
listObserver.observe(parent, { childList: true, subtree: true});
});
</script>
</body>
</html>
Последний раз редактировалось рони, 01.05.2022 в 08:24.
|
|
01.05.2022, 08:22
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Vaska,
тоже самое, обычный вариант без "сторожа-наблюдателя", добавили элемент, внесли элемент в очередь.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
header {
background: cyan;
min-height: 100px;
}
.content_container {
background: rgba(255, 0, 0, 0.3);
padding: 20px;
}
.inner-content {
height: 400px;
margin: 5px;
background: red;
overflow: scroll;
background-repeat: no-repeat;
background-size: cover;
}
footer {
background: cyan;
min-height: 500px;
}
</style>
<title></title>
</head>
<body>
<header>
<div>
other content
</div>
<p>text two</p>
<input name="" type="button" value="addDiv" onclick="addDiv()">
</header>
<div id="haupt">
<div id="acidhaupt" class="haupt-wrap background-color">
<div class="content_container">
</div>
</div>
</div>
<footer>
<p>footer content</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const lazyShow = divs => {
divs.forEach(e => {
if (e.intersectionRatio < .3) return;
let div = e.target,
url = div.dataset.url;
setTimeout(_ => div.style.backgroundImage = 'url(' + url + ')', 600) //имитация грузим контент с сервера
observer.unobserve(div);
});
};
let observer = new IntersectionObserver(lazyShow, {
rootMargin: "10px",
threshold: [.3]
});
let parent = document.querySelector('#haupt');
const add = () => parent.querySelectorAll('.inner-content:not(.load)').forEach(div => {
observer.observe(div);
div.classList.add('load');
});
add();
/*let listObserver = new MutationObserver(add); //отслеживание появления новых блоков .inner-content в #haupt
listObserver.observe(parent, { childList: true, subtree: true});*/
let r = 1;
document.querySelector('[value="addDiv"]').addEventListener('click', function() {
document.querySelector('#haupt .content_container').insertAdjacentHTML('beforeend', '<div class="inner-content" data-url="https://picsum.photos/300/100?' + (r++) + '"></div>');
add();
})
});
</script>
</body>
</html>
|
|
01.05.2022, 09:02
|
Профессор
|
|
Регистрация: 08.05.2017
Сообщений: 178
|
|
рони,
сейчас получаю такую ошибку (это предпоследний вариант вашего кода)
Я этот кусок скрипта разместил в теле страницы, закомментировал <div id="consulting_demo" class="dss-loading"></div>
Див вообще ненужно размещать?
|
|
01.05.2022, 09:23
|
Профессор
|
|
Регистрация: 08.05.2017
Сообщений: 178
|
|
Скорее всего я что-то не так делаю, но мне скрипт нужен, чтобы по размеченным на странице дивам, тянуть Ajax'ом контент.
А последние версии вашего кода куда-то не туда пошли.
И я запутался.
У меня нет кнопок, чтобы на них жмакать и так подгружать контент, это не нужно.
|
|
01.05.2022, 10:41
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Vaska
|
сейчас получаю такую ошибку (это предпоследний вариант вашего кода)
|
я не знаю что это за синтаксис и откуда эти переменные.
load("{:url('consult.html',['goods_id'=>$goods.goods_id])}",
|
|
01.05.2022, 10:43
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Vaska
|
о мне скрипт нужен, чтобы по размеченным на странице дивам, тянуть Ajax'ом контент.
|
пост #6
|
|
01.05.2022, 11:26
|
Профессор
|
|
Регистрация: 08.05.2017
Сообщений: 178
|
|
Сообщение от рони
|
я не знаю что это за синтаксис и откуда эти переменные.
load("{:url('consult.html',['goods_id'=>$goods.goods_id])}",
|
Я взял код из этого поста https://javascript.ru/forum/545103-post22.html
Заполнил адрес и получилось так:
if(url.includes('/home/Goods/consulting.html'))
$(div).load("/home/Goods/consulting.html?goods_id=2&store_id=1", function(){
// Membership card
$(this).find('[dstype="mcard"]').membershipCard({type:'shop'});
});
else
$(div).load(url);
В итоге, получаю ошибку на скриншоте.
|
|
|
|