как с помощью одной переменной передать аргументы в функцию? js

H2
На сайте с 07.02.2012
Offline
21
1111

Как с помощью одной переменной передать аргументы в функцию?

функция:


function ui_play(data, hid) {

//обычно cur_song_id, prev_song_id, next_song_id - одно число
cur_song_id=data;
next_song_id=parseInt(cur_song_id)+1;
prev_song_id=parseInt(cur_song_id)-1;
first_song_id=$('#playlist').find('li').first().attr('data-num');
last_song_id=$('#playlist').find('li').last().attr('data-num');

if (typeof hid != 'undefined') { //но если существует аргумент hid, то next_song_id и prev_song_id должны содержать в себе два аргумента для дальнейшего вызова функции ui_play(next_song_id) или ui_play(prev_song_id)
next_song_id=$('#my_live_playlist').find('li[data-id="'+(parseInt(hid)+1)+'"]').attr('data-num')+","+(parseInt(hid)+1);
prev_song_id=$('#my_live_playlist').find('li[data-id="'+(parseInt(hid)-1)+'"]').attr('data-num')+","+(parseInt(hid)-1);
}

однако как я не пробовал передать аргументы next_song_id и prev_song_id, функция считала, что это одна строка...

C
На сайте с 04.02.2005
Offline
291
#1

function ui_play(data, hid) {


//обычно cur_song_id, prev_song_id, next_song_id - одно число

cur_song_id=data;
next_song_id=parseInt(cur_song_id)+1;
prev_song_id=parseInt(cur_song_id)-1;

first_song_id=$('#playlist').find('li').first().attr('data-num');
last_song_id=$('#playlist').find('li').last().attr('data-num');

if (hid != 'undefined') { //но если существует аргумент hid, то next_song_id и prev_song_id должны содержать в себе два аргумента для дальнейшего вызова функции ui_play(next_song_id) или ui_play(prev_song_id)
next_song_id=$('#my_live_playlist').find('li[data-id="'+(parseInt(hid)+1)+'"]').attr('data-num')+","+(parseInt(hid)+1);
prev_song_id=$('#my_live_playlist').find('li[data-id="'+(parseInt(hid)-1)+'"]').attr('data-num')+","+(parseInt(hid)-1);
}
H2
На сайте с 07.02.2012
Offline
21
#2
Chukcha:
function ui_play(data, hid) {


//обычно cur_song_id, prev_song_id, next_song_id - одно число

cur_song_id=data;
next_song_id=parseInt(cur_song_id)+1;
prev_song_id=parseInt(cur_song_id)-1;

first_song_id=$('#playlist').find('li').first().attr('data-num');
last_song_id=$('#playlist').find('li').last().attr('data-num');

if (hid != 'undefined') { //но если существует аргумент hid, то next_song_id и prev_song_id должны содержать в себе два аргумента для дальнейшего вызова функции ui_play(next_song_id) или ui_play(prev_song_id)
next_song_id=$('#my_live_playlist').find('li[data-id="'+(parseInt(hid)+1)+'"]').attr('data-num')+","+(parseInt(hid)+1);
prev_song_id=$('#my_live_playlist').find('li[data-id="'+(parseInt(hid)-1)+'"]').attr('data-num')+","+(parseInt(hid)-1);
}

Вы меня наверное не правильно поняли.

if (typeof hid != 'undefined')

у меня и так работает, мне нужно вызвать функцию, передав ей в переменной аргументы, например:

ui_play(next_song_id) //где next_song_id содержит в себе либо одно число, либо аргументы data и hid

но я не понимаю, как в одной переменной передать аргументы функции

DiAksID
На сайте с 02.08.2008
Offline
236
#3

если верно уловил ;), просто сделайте в функции проверку типа:


function f(a)
{
if (a instanceof Array){
data = a['data'];
hid = a['hid'];
}
else
{
next_song_id = a;
}
}
show must go on !!!...
дани мапов
На сайте с 06.09.2012
Offline
204
#4

javascript передать массив в качестве параметра

http://javascript.ru/forum/misc/5386-peredacha-parametrov-v-vide-massiva-v-funkciyu.html

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
C
На сайте с 04.02.2005
Offline
291
#5

function exampleFunc() {

alert(arguments[0]);

alert(arguments[1]);

alert(arguments[2]);

}

exampleFunc(1, 2, 3);

H2
На сайте с 07.02.2012
Offline
21
#6

Спасибо всем, попробую :)

H2
На сайте с 07.02.2012
Offline
21
#7

Спасбо ещё раз всем, решил проблему так:


function ui_play(linum) {
if (linum instanceof Array) {data=linum[0];hid=linum[1];} else {data=linum;}

cur_song_id=parseInt(data);
next_song_id=parseInt(cur_song_id)+1;
prev_song_id=parseInt(cur_song_id)-1;
first_song_id=$('#playlist').find('li').first().attr('data-num');
last_song_id=$('#playlist').find('li').last().attr('data-num');

if (typeof hid != 'undefined') {
first_song_id_live=new Array($('#my_live_playlist').find('li').first().attr('data-num'), $('#my_live_playlist').find('li').first().attr('data-id'));
last_song_id_live=new Array($('#my_live_playlist').find('li').last().attr('data-num'), $('#my_live_playlist').find('li').last().attr('data-id'));
next_song_id=new Array($('#my_live_playlist').find('li[data-id="'+(parseInt(hid)+1)+'"]').attr('data-num'), (parseInt(hid)+1));
prev_song_id=new Array($('#my_live_playlist').find('li[data-id="'+(parseInt(hid)-1)+'"]').attr('data-num'), (parseInt(hid)-1));
}
}
uberchel
На сайте с 16.01.2010
Offline
70
#8

Думаю будет удобнее передавать не массивом, а объектом:

function f(a) {
if (typeof a =="object') {
return a.id; //a.name и т.д
} else return a; //если параметр не объект
}

Пример:


function ui_play(linum) {
if (typeof linum == 'object') {
data=linum.data;
hid=linum.him;
} else data = linum;
cur_song_id=parseInt(data);
next_song_id=parseInt(cur_song_id)+1;
prev_song_id=parseInt(cur_song_id)-1;
first_song_id=$('#playlist').find('li').first().attr('data-num');
last_song_id=$('#playlist').find('li').last().attr('data-num');

if (typeof hid != 'undefined') {
first_song_id_live=new Array($('#my_live_playlist').find('li').first().attr('data-num'), $('#my_live_playlist').find('li').first().attr('data-id'));
last_song_id_live=new Array($('#my_live_playlist').find('li').last().attr('data-num'), $('#my_live_playlist').find('li').last().attr('data-id'));
next_song_id=new Array($('#my_live_playlist').find('li[data-id="'+(parseInt(hid)+1)+'"]').attr('data-num'), (parseInt(hid)+1));
prev_song_id=new Array($('#my_live_playlist').find('li[data-id="'+(parseInt(hid)-1)+'"]').attr('data-num'), (parseInt(hid)-1));
}
}

//инициализация функции
ui_play({data:'', him:''});
H2
На сайте с 07.02.2012
Offline
21
#9

Снова с толкнулся с проблемой массива, дабы не создавать новую тему, решил спросить здесь:

есть регулярка:


var info="nvar vars = {\"uid\":\"1111\",\"vid\":\"2222\",\"oid\":\"33333\",\"host\":\"44444\",\"vtag\":\"3475096d8b\"";

var info_hash = /\"uid\":\"([0-9]+)\",\"vid\":\"([0-9]+)\",\"oid\":\"([0-9]+)\",\"host\":\"([0-9]+)\",\"vtag\":\"([a-z0-9]+)\"/i;
alert(info_hash.exec(info)[0]);

возвращает:


"uid":"1111","vid":"2222","oid":"33333","host":"44444","vtag":"3475096d8b"

как я не пытался, но всё равно не могу получить данные из цитаты выше по отдельности (типа:info_hash.exec(info)[0].host)...

попытался создать объект и засунуть туда эту строку, но скрипт не работал, помогите пожалуйста :(

разобрался:


var responseText = '{'+info_hash.exec(info)[0]+'}';
var o = JSON.parse(responseText);
alert(o.host);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий