Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать функции аргумент 
V
    Опции темы
patap
Дата 15.5.2005, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



Здорово!
Такая проблема:
Есть заполненный объект mas и я его вывожу вот так:
Код

document.write('<table border="0"><tr><td>') 
  for (var i=1;i<mas.length;i++) {
    document.write('<tr>')
    for (j in mas[i]) {
      if (typeof(mas[i][j])!='number') {
        document.write('<td><a href="javascript:void(0)" onClick="open_res_window()">'+mas[i][j]+'</a>')
      }
      else {document.write('<td align="center">'+mas[i][j])}
    }
  }
document.write('</table>')


В чем значит суть:
если поле объекта не числовое, то нужно вывести это поле как ссылку(это я сделал),
но не могу понять как сделать так, чтобы функции open_res_window() передавался аргумент, который бы являлся первым полем объекта mas?


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Aliance
Дата 16.5.2005, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Код

open_res_window(mas[0])

так?

Уважаемый, patap!
Прощу не сочтите меня слишком назойливым - но не могли бы вы выполнить мое уже неоднократно данное ваш пожелание:
- Вы общаетесь на форуме. Вы общаетесь со всеми, а не с одним человеком. Старайтесь общатся вежливо и оффициально!
Не стоит писать в теме и комменту к ней одно и тоже.
прочитайте наконец правила форума и данного раздела!
PM MAIL WWW ICQ Skype   Вверх
patap
Дата 16.5.2005, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



Чтобы понять суть моего вопроса, мне нужно более подробно описать что я хочу:

есть вот такой массив
Код

var east_array=[athlantic_res,central_res,southeast_res]


каждый элемент этого массива имеет вид:
Код

athlantic_res=[
  new comand('Бостон',73,39,34,procent(73,39)), 
  new comand('Филадельфия',73,36,37,procent(73,36)), 
  new comand('Торонто',73,30,43,procent(73,30)), 
  new comand('Нью-Джерси',74,35,39,procent(74,35)), 
  new comand('Нью-Йорк',72,37,36,procent(72,37))
];


есть вот такая функция, которой передается east_array[i], т.е. массив athlantic_res (ну и остальные)
и она(функция) выводит на экран содержание этих массивов
Код

function show(mas) {
  document.write('<table border="0"><tr><td width="20">№'+
    '<td width="90">Команда'+
    '<td align="center" width="35">И'+
    '<td align="center" width="35">В'+
    '<td align="center" width="35">П'+
    '<td align="center" width="35">%'
  )
  for (var i=1;i<mas.length;i++) {
    document.write('<tr>')
    for (j in mas[i]) {
      if (typeof(mas[i][j])!='number') {  //
        document.write('<td>'+i+'. '+'<td><a href="javascript:void(0)" onClick="open_res_window('+mas[i][0]+')">'+mas[i][j]+'</a>')
      }  //сдесь название каждой команды должно быть ссылкой (это я сделал)
         //но при нажатии на ссылку в open_res_window() должно передаваться название команды
         //которое в дальнейшем выводиться на экран
         //в моем случае, так как это сделал я, на экран выводит undefined
         //как добиться нужного результата, что именно нужно передать функции open_res_window() в виде аргумента??
      else {document.write('<td align="center">'+mas[i][j])}
    }
  }
  document.write('</table><br><br>')
}
Array.prototype.show=show

document.write('<b>Восточная конференция</b>'+'<br><br>')
for (i=0;i<east_array.length;i++) {
  east_array.show(east_array[i])    //передаем массив функции
}


эта функция создает окно в котором должно выдаваться название команды
Код

function open_res_window(mm) {
  var win=window.open('','') 
  win.document.write('<html><body>'+mm)
  document.write('</body></html>')
}





--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Sardar
Дата 16.5.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Странно в массиве лежат обьекты, а запрашиваемое поле берёшь по числовому индексу 0, естественно оно не определенно. Может ты опечатался и за место 0 поставить нужно j smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
patap
Дата 17.5.2005, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



перепробывал все - результат не тот. smile
в чем может быть проблема? или может нужно применить какой-то другой подход?


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Sardar
Дата 17.5.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Выложи весь код, лучше на своём хосте, что бы можно было постмотреть что это. Затем опиши что должно быть. Напишем код.
Иначе
Цитата(patap @ 17.5.2005, 06:37)
перепробывал все - результат не тот.

мне ничего не говорит. Ты использовал числовой индекс на обьекте, который тот скорее всего не имеет, следовательно получаешь undefined.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
patap
Дата 17.5.2005, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



вот код, коментарии не писал, т.к. "проблемную" часть кода описал выше

Код

function comand(name,games,wins,lose,proc) {
  this.name=name
  this.games=games
  this.wins=wins
  this.lose=lose
  this.proc=proc
}

function comand_athlantic() {
  data_athlantic=[
    new comand('Бостон',73,39,34,procent(73,39)), 
    new comand('Филадельфия',73,36,37,procent(73,36)), 
    new comand('Торонто',73,30,43,procent(73,30)), 
    new comand('Нью-Джерси',74,35,39,procent(74,35)), 
    new comand('Нью-Йорк',72,37,36,procent(72,37))
  ];
  var athlantic=new command_container();    
  athlantic.set_container(data_athlantic);  
  return athlantic;  
}

function open_res_window(mm) {
  var win=window.open('','') 
  win.document.write('<html><body>'+mm)
 
  document.write('</body></html>')
}

function command_container() {
  this.container=[];
}

command_container.prototype.set_container=function(cont){
  this.container=cont;
}

command_container.prototype.select=function(field) {
  var cont=this.container.slice(0)
  comp=function(a,b) {    
    return (a>b? -1: (a<b? 1: 0))   
  }  
  cont.sort(function(a, b) {
    return comp(a[field],b[field])
  })
  var con=new command_container(); 
  con.set_container(cont); 
  return con;
}

function procent(f, p) { 
  var r=p*100/f
  r=Math.round(r*100)
  r=r/100
  return r
}

function comand_central() {
  data_central=[
    new comand('Детройт',73,46,27,procent(73,46)), 
    new comand('Милуоки',73,28,45,procent(73,28)), 
    new comand('Чикаго',72,41,31,procent(72,41)), 
    new comand('Индиана',72,38,34,procent(72,38)), 
    new comand('Кливленд',72,38,34,procent(72,38))
  ];
  var central=new command_container();
  central.set_container(data_central);
  return central;
}

function comand_southeast() {
  data_southeast=[
    new comand('Вашингтон',72,41,31,procent(72,41)), 
    new comand('Атланта',73,11,62,procent(73,11)), 
    new comand('Орландо',73,35,38,procent(73,35)), 
    new comand('Шарлотт',72,15,57,procent(72,15)), 
    new comand('Майами',74,55,19,procent(74,55))
  ];
  var southeast=new command_container();
  southeast.set_container(data_southeast);
  return southeast;
}

function show(mas) {
  document.write('<table border="0"><tr><td width="20">№'+
    '<td width="90">Команда'+
    '<td align="center" width="35">И'+
    '<td align="center" width="35">В'+
    '<td align="center" width="35">П'+
    '<td align="center" width="35">%'
  )
  for (var i=0;i<mas.length;i++) {
    document.write('<tr>')
    for (j in mas[i]) {
      if (typeof(mas[i][j])!='number') {
        document.write('<td>'+(i+1)+'. '+'<td><a href="javascript:void(0)" onClick="open_res_window('+mas[i][0]+')">'+mas[i][j]+'</a>')
      }
      else {document.write('<td align="center">'+mas[i][j])}
    }
  }
  document.write('</table><br><br>')
}

var athlantic=comand_athlantic();
var res_athlantic=athlantic.select('wins');
var athlantic_res=res_athlantic.container;

var central=comand_central();
var res_central=central.select('wins');
var central_res=res_central.container;

var southeast=comand_southeast();
var res_southeast=southeast.select('wins');
var southeast_res=res_southeast.container;


var east_array=[athlantic_res,central_res,southeast_res]

Array.prototype.show=show

document.write('<b>Восточная конференция</b>'+'<br><br>')
for (i=0;i<east_array.length;i++) {
  east_array.show(east_array[i])
}




--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Sardar
Дата 18.5.2005, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Так, ты не сказал что нужно сделать. Делаю на угад, но, на будущее привыкни давать описание проблемы/задачи, иначе просто лень делать, вдруг не то smile

Код

function Comand(name,games,wins,lose) {
  this.name=name;
  this.games=games;
  this.wins=wins;
  this.lose=lose;
  this.proc=(games*100/wins).toFixed(2);
}

function CommandContainer() {
  this.container=[];
}
CommandContainer.prototype.setContainer=function(cont){
  this.container=cont;
}
CommandContainer.prototype.select=function(field) {
  var cont=this.container.slice(0);
  comp=function(a,b) {    
    return (a>b? -1: (a<b? 1: 0))   
  }  
  cont.sort(function(a, b) {
    return comp(a[field],b[field])
  })
  var con=new CommandContainer(); 
  con.setContainer(cont); 
  return con;
}
CommandContainer.prototype.toString=function() {
  var code='<table border="0"><tr><td width="20">№'+
    '<td width="90">Команда'+
    '<td align="center" width="35">И'+
    '<td align="center" width="35">В'+
    '<td align="center" width="35">П'+
    '<td align="center" width="35">%';

  for (var i=0; i<this.container.length; i++) {
    code+='<tr>';
    for (j in this.container[i]) {
      if(typeof(this.container[i][j])=="function") continue;
      if(j=="name") code+='<td>'+(i+1)+'. '+'<td><a href="javascript: open_res_window(\''+this.container[i][j]+'\')">'+this.container[i][j]+'</a>';
      else code+='<td align="center">'+this.container[i][j];
    }
  }
  code+='</table><br><br>';
  return code;
}

//============- Data -==================
var athlantic= new CommandContainer();    
athlantic.setContainer([
  new Comand('Бостон',73,39,34), 
  new Comand('Филадельфия',73,36,37), 
  new Comand('Торонто',73,30,43), 
  new Comand('Нью-Джерси',74,35,39), 
  new Comand('Нью-Йорк',72,37,36)
]);
 
var central=new CommandContainer();
central.setContainer([
  new Comand('Детройт',73,46,27), 
  new Comand('Милуоки',73,28,45), 
  new Comand('Чикаго',72,41,31), 
  new Comand('Индиана',72,38,34), 
  new Comand('Кливленд',72,38,34)
]);
  
var southeast=new CommandContainer();
southeast.setContainer([
  new Comand('Вашингтон',72,41,31), 
  new Comand('Атланта',73,11,62), 
  new Comand('Орландо',73,35,38), 
  new Comand('Шарлотт',72,15,57), 
  new Comand('Майами',74,55,19)
]);


document.write('<b>Восточная конференция</b>'+'<br><br>');
document.write(athlantic + central + southeast);


function open_res_window(mm) {
  var win=window.open("about:blank","_blank",""); 
  win.document.write('<html><body>'+mm+'</body></html>');
}


Во вторых попробуй придерживаться стиля кода как у меня, тогда тебя больше народу поймёт, да и красивее и понятней smile

Ну и наконец если код делает то что нужно, то в твоём коде нужно изменить:
'+mas[i][0]+' на \''+mas[i][j]+'\', другими словами не пиши:
Цитата(patap @ 17.5.2005, 06:37)
перепробывал все - результат не тот

А действительно следуй совету smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.