Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получить значение из обработчика события (https://javascript.ru/forum/misc/28963-poluchit-znachenie-iz-obrabotchika-sobytiya.html)

mirek 08.06.2012 20:25

Получить значение из обработчика события
 
Имеем:
function(){
ГлобальныйМассив[0]="какое-то значение"
}

Так не работает.

А как передать значение из обработчика событий ?

Deff 08.06.2012 20:32

Цитата:

Сообщение от mirek
function(){ГлобальныйМассив[0]="какое-то значение"}

Хм - приведите пример, и Вы учтите - что считывать переменную нужно тоже по событию, или по заведомо превышаюшему таймеру, - поскольку: Вы можете читать - а там пусто, посколь обращения к обработчику еще не было

mirek 08.06.2012 20:36

Цитата:

Сообщение от Deff
Хм - приведите пример

Ну вот я его привел. Можно перевести латинскими буквами разве что:)
Просто записать в переменную глобального массива GlobalArray[0] = "some value"

Даже такой код не работает

На счет пусто то я уже делал и с задержкой setTimeout("alert(GlobalArray[0])", 9000);

И так не работает. Значение = undefined

dmitriymar 08.06.2012 20:41

ну дак учтите что функция обработчик вешается на событе.
знак = подразумевает что результат возвращается вызвавшему,но здесь реакция на событие-так что глупо ожидать что событию вызвавшему эту функцию присвоиться значение по ретурну,а если да что с ним делать? Что значит глобальный массив?
т.е вы думаете что что создастся глобальное внутри функции?-нет. может создаться свойство объекта window если если вы к нему обратитесь и его до этого не существовало. так,мысли вслух.Но наверное не предусмотрено что создаться свойство какое массив,поставил бы на то что создаться свойство какое объект,но мало вероятно-могу ошибаться во всём -тема не паханная. Все знают что при обращении к несуществующему создаться свойство...
выход -создать ручками глобальный массив и обращаться к нему внутри функции

mirek 08.06.2012 20:47

Цитата:

Сообщение от dmitriymar
выход -создать глобальный массив и обращаться к нему внутри функции

Ну вот в моем примере так и есть

GlobalArray ранее объявлен между тегами <head> <script type="text/javascript">GlobalArray = new Array();</script></head>

Deff 08.06.2012 20:52

Цитата:

Сообщение от mirek
Ну вот я его привел.

<span   onclick="ClickFunc(); return false;">Клик функция</span>
<script type="text/javascript">
var Glob_arr=new Array,index=0;
function ClickFunc(){
 Glob_arr.push(index);
 index++;
 alert(Glob_arr);
}
</script>

dmitriymar 08.06.2012 20:57

глобальное создаётся
var GlobalArray = new Array()

всё остальное это свойство window.
var a== this.a==window.a -не во всяком контексте
но, var a!== this.a!==window.a -в смысле контексты разные
попробуйте через контекст,через window,объявляя глобальным массивом... либо у вас гдето ошибка возникает до этого и код не обратывается. поставьте alert(1) перед записью в массив -если не сработает -значит ошибка ранее,смотрите фаирбаг или подобные инструменты отладки....

dmitriymar 08.06.2012 21:11

<span   onclick="ClickFunc(); return false;">Клик функция</span>
<script type="text/javascript">
var Glob_arr=new Array();
var index=-10;
function ClickFunc(){
 Glob_arr.push(index);
 index++;
alert(Glob_arr[0])
 alert(index);
 alert(this.index)
alert(window.index)
alert(this.index===index)
alert(window.index==index)
alert(this.index===window.index)
}
</script>

mirek 08.06.2012 21:23

У меня udefined

Ошибок в консоли ошибок нет

dmitriymar 08.06.2012 21:29

ну дак это должно о многом вам сказать. смотрите ваш код либо выкладывайте тестовый-сами видите тестовый выше работает

mirek 08.06.2012 22:31

GlobalArray = new Array();
Test = 0;

$("#block").find("*").each(function(){
     GlobalArray.push("test value");
     Test = 55;
});

alert( GlobalArray[0]);
alert( Test);


ВОТ ТАК НЕ РАБОТАЕТ!

Deff 08.06.2012 22:38

mirek,
alert должен вызываться после клика, до клика Ваш массив пуст,

Поэтому алерт должен вызываться после совершения событий(я ж уже говорил)

скрипт исполняется сразу - алерт вызвался - клика еще не было

mirek 08.06.2012 22:48

Цитата:

Сообщение от Deff
алерт вызвался - клика еще не было

В данном случае
$("#block").find("*")
проходит по всем ф-циям #block

При чем если там поставить $(this).attr("id", "NewID") то id например меняется

То есть там о событии onclick нет речи

mirek 08.06.2012 23:05

ИЗВИНИТЕ!!!
Работает прекрасно если код бы был действительно таким

GlobalArray = new Array();

Test = 0;

$("#block").find("*").each(function(){

     GlobalArray.push("test value");

     Test = 55;

});

alert( GlobalArray[0]);
alert( Test);



Но не работает в этом случае:
GlobalArray = new Array();

Test = 0;

$("#block").find("*").each(function(){
if(typeof $(this).attr("id") != "undefined")
  {
if($(this).attr("id").indexof("MyID") != -1)
{
     GlobalArray.push("test value");

     Test = 55;
}
}
});

alert( GlobalArray[0]);
alert( Test);


Но мне как раз надо записать в массив если id определен и равен MyID

Deff 08.06.2012 23:07

Цитата:

Сообщение от mirek
проходит по всем ф-циям #block

Выложите Ваш HTML код и код скрипта И объясните про поиск
Так будет быстрее

Deff 08.06.2012 23:15

Цитата:

Сообщение от mirek
Но не работает в этом случае:

var a = $("#block")
var b = a.length;
GlobalArray = new Array()
if(b){b.find("*").each(function(){
  GlobalArray.push("test value");
  Test = 55;
 });
  alert( GlobalArray[0]);
} else alert("Элемент '#block' - Не найден");

mirek 08.06.2012 23:16

Извините снова!!!

РАЗОБРАЛСЯ!!! ТЕМА НЕ АКТУАЛЬНА!!!

Просто на момент проверки if($(this).attr("id").indexof("MyID") != -1)
На странице ни одного элемента с таким id не было :-E :-/


Часовой пояс GMT +3, время: 23:52.