javascript jquery, определить существование переменной

rtyug
На сайте с 13.05.2009
Offline
263
1260

не могу понять с одной штукой, может я делаю как-то сложно...

есть код:


$(".groups_members").live("click", function(){



var hash = {};

hash =
{
'page' : '0',
'sort' : '0',
'asc' : '0',


}



hash['page'] = this.hash.replace(/.*(?:page=)(\d+).*/,'$1');
hash['sort'] = this.hash.replace(/.*(?:sort=)(\d+).*/,'$1');
hash['asc'] = this.hash.replace(/.*(?:asc=)(\d+).*/,'$1');

if (! hash['sort'] > 0) {
hash['sort'] = "0";
}

if (!hash['page'] > 0) {
hash['page'] = "0";
}

if ( hash['asc'] < 1) {
hash['asc'] = 0;
}


$.getJSON("/groups/groups_member_view/6/0/"+ hash['sort']+"/"+hash['asc'], function(msg) {



if (msg.success_ok > 0) {









$("#blog_un").html("");

$(".info_view").html("<b>Просмотр пользователей в этой группе:</b>");



var text_asc;
if ( hash['asc'] < 1) {
text_asc = "&asc=1";
} else {
text_asc = "";
}


var line;
if (hash['asc']) {
line = "<img src='/images/sort_up.gif' border='0' />";
} else {
line = "<img src='/images/sort_down.gif' border='0' />";
}


var text_username_sort = "";
var text_count_thread_sort = "";
var text_count_comment_sort = "";
var text_count_energy_sort = "";
var text_created_sort = "";



if (hash['sort'] == 1) {
text_username_sort = line;
}

else if (hash['sort'] == 2) {
text_count_thread_sort = line;
}

else if (hash['sort'] == 3) {
text_count_comment_sort = line;
}


else if (hash['sort'] == 4) {
text_count_energy_sort = line;
}


else if (hash['sort'] == 5) {
text_created_sort = line;
}

else {
text_created_sort = line;
}

все работает, кроме:

проблема в том что может быть будет в ссылке сущность page=666 sort=666, а может не быть...

и получется что hash['page'] равняется какому-то не определенному значению... НЕ undefined

и ошибку получется тут

$.getJSON("/groups/groups_member_view/6/0/"+ hash['sort']+"/"+hash['asc'], function(msg) {   

как тут сделать что если hash['sort'] не определено то заменить его на '0'

тут я использовал переменную var sort, потом сделал хэш

пробовал проверить это значение через typeof но не получается...

  
if ( typeof eval(asc) == "undefined" ) {
asc = "0";
}

как это можно сделать?

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
Knave
На сайте с 01.02.2007
Offline
48
#1

Я в Жабе чайник, но по-моему, тут eval не нужен:



if ( typeof (asc) == "undefined" ) {
asc = "0";
}

или просто



if (!asc) {
asc = "0";
}

попробуйте.

That's what's the deal we're dealin' in
rtyug
На сайте с 13.05.2009
Offline
263
#2

не работает в том то и прикол...

вот эта запись

asc = this.hash.replace(/.*(?:asc=)(\d+).*/,'$1'); 

"портит" переменную что она в каком-то не определенном состоянии

[Удален]
#3

а так:

if (typeof(asc)=='undefined'||isNaN(asc)||typeof(asc)=='boolean'||typeof(asc)=='object') { asc = 0; }
?
rtyug
На сайте с 13.05.2009
Offline
263
#4

So1, не работает, asc просто ничему не определено... то как я написал в первом посте

(а если asc определено и равняется 1 - то все работает!!!)

я с этой проблемой так затрахался что ужас...

видимо тут проблема с типизацией на javascript, надо пойти другим путем...

[Удален]
#5

Тогда можно извратиться так:

if (asc) {} else { asc = 0;}

:-D

[Удален]
#6
rtyug:
asc = this.hash.replace(/.*(?:asc=)(\d+).*/,'$1');

так ПОПРАВЬТЕ ЭТУ ЗАПИСЬ, и это не ЗАПИСЬ, это "код". вам надо

if(this.hash.test(/../)) { hash["asc"] = this.hash.replace ...}

if(hash['asc']) ... а тут оно уже undefined || false.

кто же так пишет то? .... были семен, вася и петя. есть ли вася: нашли васю и взяли его в другую команду, либо взяли всех кроме васи. был ли вася в команде? логику короче лечите ;)

rtyug
На сайте с 13.05.2009
Offline
263
#7

спасибо, забыл отписатся, я напутал...

сделал так:



var hash = {};




// var asc = "0";

// hash['page'] = this.hash.replace(/.*(?:page=)(\d+).*/,'$1');
// hash['sort'] = this.hash.replace(/.*(?:sort=)(\d+).*/,'$1');
// hash['asc'] = this.hash.replace(/.*(?:asc=)(\d*).*/,'$1')


var reg=/[#&](\w+)=(\w*)/g;
var result,hash={};
while(result=reg.exec(this.hash)){
hash[result[1]]=result[2];
}

работает

rtyug добавил 30.06.2010 в 08:58

ЗЫ: я что-то репутацию не могу никому добавить...

[Удален]
#8
rtyug:
ЗЫ: я что-то репутацию не могу никому добавить...

уже добавлял значит :)

тут практически 1 раз в жизни 1му человеку можно репу менять)

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