Объединение двух onclick функций
Здравствуйте! Помогите, пожалуйста объединить две функции.
Ссылки:
<div class="spoiler_body">
<a onclick="vidLoc('2877555',this,'3')">1</a>
<a onclick="vidLoc('2882250',this,'3')">2</a>
<a onclick="vidLoc('2888972',this,'3')">3</a>
</div>
Первая функция запоминает последнюю нажатую ссылку:
var _mem = localStorage;
var itm = $(".identifier:first").attr('id'),
idx = !!_mem['items'] && JSON.parse(_mem['items']) || {};
a = $("div.spoiler_body > a").on("click", function() {
a.not($(this).addClass("eps")).removeClass("eps");
$(".eps").parent().css( "display", "block");
idx[itm] = a.index(this);
_mem['items'] = JSON.stringify(idx);
});
if(idx) a.eq(idx[itm]).trigger('click');
Вторая функция показывает видео:
function vidLoc(id,link,type) {
document.getElementById('player0').innerHTML = '<iframe src="'+id+'" frameborder="0" allowfullscreen="true"></iframe>';
}
Получается, что две функции, которые срабатывают по нажатии на ссылку. Мне бы очень хотелось понять, как можно объединить в одну функцию. Спасибо. |
<a data-avi="2877555">1</a> Что такое 3 вопрос.
a = $("div.spoiler_body > a").on("click", function() {
var b = $(this);
a.not(b.addClass("eps")).removeClass("eps");
//$(".eps").parent().css( "display", "block"); это как понять?
idx[itm] = a.index(b);
_mem['items'] = JSON.stringify(idx);
$('#player0').html('<iframe src="'+b.data('avi')+'" frameborder="0" allowfullscreen="true"></iframe>'); //а может просто src менять?
});
|
laimas,
//$(".eps").parent().css( "display", "block");
Ссылка (она же серия) находится под спойлером. Поскольку нажатая ссылка запоминается, когда перезагружаешь страницу - этот спойлер будет открытым. У меня несколько плееров, полная версия кода выглядит так:
function vidLoc(id,link,type)
{
if ( type == 1 ) {
document.getElementById('player0').innerHTML = '<iframe src="'+id+'" frameborder="0" allowfullscreen="true"></iframe>';
}
if ( type == 2 ) {
document.getElementById('player0').innerHTML = '<iframe src="//myvi.ru/player/embed/html/'+id+'" frameborder="0" allowfullscreen></iframe>';
}
if ( type == 3 ){
document.getElementById('player0').innerHTML = '<iframe src="//video.sibnet.ru/shell.php?videoid='+id+'" frameborder="0" scrolling="no" allowfullscreen></iframe>';
}
if ( type == 4 ){
document.getElementById('player0').innerHTML = '<iframe src="//rutube.ru/play/embed/'+id+'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen></iframe>';
}
if ( type == 5 ){
document.getElementById('player0').innerHTML = '<iframe src="https://www.facebook.com/plugins/video.php?href=https://www.facebook.com/100018160368189/videos/'+id+'/&show_text=0&width=666&height=354" frameborder="0" allowFullScreen="true"></iframe>';
}
if ( type == 6 ){
document.getElementById('player0').innerHTML = '<iframe src="https://drive.google.com/file/d/'+id+'/preview" frameborder="0" allowFullScreen="true"></iframe>';
}
if ( type == 7 ){
document.getElementById('player'+play).innerHTML = '<iframe src="https://ok.ru/videoembed/'+id+'" frameborder="0" allowfullscreen></iframe>';
}
}
Вообще, саму задумку можно посмотреть наглядно здесь: ссылка на сайт ссылка на скрипт При нажатии на серию - появляется панель под видео, которая работает только после перезагрузки. А если я добавляю функцию внутрь onclick
a = $("div.spoiler_body > a").on("click", function() {
// здесь функция появления панели
});
то всё работает сразу, без перезагрузки, но с каждым кликом переключение серий скачет на +2 позиции. Выключаю запоминание и сразу 10 уведомлений выскакивает, хотя должно только одно. Это и есть проблема. Перепробовала разные варианты, но моих знаний недостаточно, чтобы решить загадку. |
Nezumi.May,
по коду представленному не известно что и под чем находится, но для:
<div class="spoiler_body">
<a onclick="vidLoc('2877555',this,'3')">1</a>
</div>
код ваш будет означать следующее:
$(".eps") //текущая ссылка, она получила ранее этот класс, то есть можно было бы и просто $(this), у всех других этот класс удален
.parent() //получить родителя текущей ссылки, а это spoiler_body в которой она и находится
.css( "display", "block"); //показать родителя. А что до этого он был скрыт, и как тогда щелкнули по ссылке?
Можно в data атрибуте указать что угодно, можно так data-avi="2877555,1" - где вторая цифра и есть type, разбив по запятой это значение получим нужные. Можно так data-avi="[2877555,1]", тогда JQ при получении этого значения сразу вернет массив:
a = $("div.spoiler_body > a").on("click", function() {
var b = $(this), d = b.data('avi'), p = $('#player0');
a.not(b.addClass("eps")).removeClass("eps");
//$(".eps").parent().css( "display", "block"); это так и не понять, да и вообще как было сказано, это будет b.parent().show();
idx[itm] = a.index(b);
_mem['items'] = JSON.stringify(idx);
switch(d[1]) {
case 1: p.html('<iframe src="'+d[0]+'" frameborder="0" allowfullscreen="true"></iframe>');
break;
case 2: p.html('<iframe src="//myvi.ru/player/embed/html/'+d[0]+'" frameborder="0" allowfullscreen></iframe>');
break;
//и т.д.
}
});
|
laimas,
Цитата:
Цитата:
Можно как-то иначе сделать, чтобы панель, которая появляется после нажатия на серию, работала сразу, а не после перезагрузки? Вы мне очень поможете, если подскажите. |
Цитата:
Я не знаю как все на самом деле у вас организовано, но например:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<style>
.box {
padding-top: 30px;
margin-bottom: 3px;
background-color: #999;
}
.spoiler_body {
display: none;
background-color: #fff;
}
</style>
<script>
$(function() {
var _mem = localStorage;
idx = !!_mem['items'] && _mem['items'] || 0;
var box = $('div.box').click(function() {
$(this).find('.spoiler_body').slideDown(300);
box.not(this).find('.spoiler_body').slideUp(300);
_mem['items'] = box.index(this); //запомнили спойлер
}).find('a').click(function() {
var d = $(this).data('avi');
//запуск фрейма
}).end();
box.eq(idx).trigger('click');
});
</script>
</head>
<body>
<div class="box"><div class="spoiler_body"><a data-avi="[11111,1]">111_1</a><br><a data-avi="[11111,2]">111_2</a></div></div>
<div class="box"><div class="spoiler_body"><a data-avi="[22222,1]">222_1</a><br><a data-avi="[22222,2]">222_2</a></div></div>
<div class="box"><div class="spoiler_body"><a data-avi="[33333,1]">333_1</a><br><a data-avi="[33333,2]">333_2</a></div></div>
</body>
</html>
Цитата:
Цитата:
|
Цитата:
Цитата:
<div class="spoiler_body">
<a onclick="vidLoc('2877555',this,'3')">1</a>
<a onclick="vidLoc('2882250',this,'3')">2</a>
<a onclick="vidLoc('2888972',this,'3')">3</a>
</div>
Поэтому не получится использовать вариант: <a data-avi="[33333,1]">333_1</a> А что касается Цитата:
a = $("#anime-online > div > div.spoiler_body > a").on("click", function() {
var nomser = $(this).text();
var melement=document.getElementById('pipipipi');
if(!melement){$('<div id="pipipipi"><i class="fa fa-step-backward" id="prevser"></i><span><span id="nomss">'+nomser+'</span> серия</span><i class="fa fa-step-forward" id="nextser"></i><a href="javascript://" id="zapominalka" class="nezapomn">Серия запомнена</a><a href="javascript://" id="kinoteatr">Режим кинотеатра</a></div>').insertBefore($("#anime-online"));}
else {document.getElementById('nomss').innerHTML = nomser;}
});
При клике на ссылку скрипт добавляет панель под плеер: <div id="pipipipi"><i class="fa fa-step-backward" id="prevser"></i><span><span id="nomss">'+nomser+'</span> серия</span><i class="fa fa-step-forward" id="nextser"></i><a href="javascript://" id="zapominalka" class="nezapomn">Серия запомнена</a><a href="javascript://" id="kinoteatr">Режим кинотеатра</a></div> Так вот ссылки на ней работают только после перезагрузки. А мне нужно, чтобы они работали сразу, но никак не получается это сделать. Скрипт управления панелью:
$(function() {
$('#prevser').click(function() {$( "a.eps" ).prev().trigger('click')});
$('#nextser').click(function() {$( "a.eps" ).next().trigger('click')});
$('#kinoteatr').click(function(){//скрипт кинотеатра});
$('#zapominalka').click(function() {
$(".zapomn").removeClass("zapomn").addClass("nezapomn");
document.getElementById('zapominalka').innerHTML = "Запоминание выкл.";
_uWnd.alert('Серия была успешно забыта','',{w:230,h:50,tm:2000});
delete idx[itm];
_mem['items'] = JSON.stringify(idx);
});
})
|
Цитата:
$(function() {
$('#anibox-pleer').on('click', '#prevser', function() {$( "a.eps" ).prev().trigger('click')});
$('#anibox-pleer').on('click', '#nextser', function() {$( "a.eps" ).next().trigger('click')});
$('#anibox-pleer').on('click', '#kinoteatr', function(){//скрипт кинотеатра});
$('#anibox-pleer').on('click', '#zapominalka', function() {
$(".zapomn").removeClass("zapomn").addClass("nezapomn");
document.getElementById('zapominalka').innerHTML = "Запоминание выкл.";
_uWnd.alert('Серия была успешно забыта','',{w:230,h:50,tm:2000});
delete idx[itm];
_mem['items'] = JSON.stringify(idx);
});
});
|
Цитата:
Вы показываете свой код/проблемы кусками - по мере роста темы появляется все новое, ранее не оговоренное, трудно уследить что вы там делаете и чего хотите сделать. На данный момент видна проблема с назначением обработчиков в "pipipipi", а нужно либо делегировать обработку событий добавляемого блока, либо устанавливать их обработчики после добавления его в документ. А причем тут ссылки, которые могут работать после только после перезагрузки не понятно. |
Белый шум, laimas,
Спасибо большое за помощь! Всё получилось, дальше я сама. |
| Часовой пояс GMT +3, время: 17:14. |