Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   изменение значения глобальной переменной внутри функции (https://javascript.ru/forum/server/21488-izmenenie-znacheniya-globalnojj-peremennojj-vnutri-funkcii.html)

mgmarket 12.09.2011 11:39

изменение значения глобальной переменной внутри функции
 
Драссьте...
Такая проблема.
В скрипте PHP запускаю функцию JS и передаю в функцию значение переменной $pref=3;
echo ="<script>count(".$ddd.");</script>";
в подключеном файле script.js выполняю эту функцию

var countOfFields = 0
function count(ddd)
{
window.countOfFields=ddd;
}
count();
alert(countOfFields) - выдает undefined
:blink:

при этом если внутри функции конкретно присвоить ручками число или текст, например

var countOfFields = 0
function count(ddd)
{
window.countOfFields="Привет!";
}
count();
alert(countOfFields) - выдает Привет!

Я не могу разобраться, как заставить из PHP присвоить новое значение глобальной переменной, помогите, а?

walik 12.09.2011 12:11

var countOfFields = 0;
function count(ddd)
{
window.countOfFields=ddd;
}
count(<?=$pref?>);


А почему бы сразу не сделать:
window.countOfFields = <?=$pref?>;

?

mgmarket 12.09.2011 12:36

Цитата:

Сообщение от walik
А почему бы сразу не сделать:
window.countOfFields = <?=$pref?>;

Это нужно вставить в PHP код или в подгружаемый файл script.js?

mgmarket 12.09.2011 12:38

Цитата:

Сообщение от walik
1var countOfFields = 0;2function count(ddd)3{4window.countOfFields=ddd;5}6count(<?= $pref?>)

Это не работает... вообще не выполняется...

Триви 12.09.2011 13:01

Цитата:

Сообщение от mgmarket (Сообщение 126050)
Драссьте...
Такая проблема.
В скрипте PHP запускаю функцию JS и передаю в функцию значение переменной $pref=3;
echo ="<script>count(".$ddd.");</script>";
в подключеном файле script.js выполняю эту функцию

var countOfFields = 0
function count(ddd)
{
window.countOfFields=ddd;
}
count();
alert(countOfFields) - выдает undefined
:blink:

при этом если внутри функции конкретно присвоить ручками число или текст, например

var countOfFields = 0
function count(ddd)
{
window.countOfFields="Привет!";
}
count();
alert(countOfFields) - выдает Привет!

Я не могу разобраться, как заставить из PHP присвоить новое значение глобальной переменной, помогите, а?

Это происходит, потому что в первом случае, вызывая функцию count() таким образом,
ты не присваиваешь никакого значения глобальной переменной countOfFields,
соответственно и undefined.
А во 2-м случае ты присваиваешь ей значение "Привет!",
соответственно alert(countOfFields) - выдает Привет!

mgmarket 12.09.2011 13:11

Цитата:

Сообщение от Триви (Сообщение 126064)
Это происходит, потому что в первом случае, вызывая функцию count() таким образом,
ты не присваиваешь никакого значения глобальной переменной countOfFields,
соответственно и undefined.
А во 2-м случае ты присваиваешь ей значение "Привет!",
соответственно alert(countOfFields) - выдает Привет!

Ну так а вот это в теле функции:

window.countOfFields=ddd;
где ddd параметр, переданный в функцию и при этом внутри функции

alert(window.countOfFields) прекрасно выдает значение ddd

может напишешь, как правильно сделать, плз...

Триви 12.09.2011 13:16

Не сразу заметил..
А зачем ты наструячил в подключаемом файле:
count();
alert(countOfFields)
???
Какой в этом тайный умыслел? =))

mgmarket 12.09.2011 14:20

Цитата:

Сообщение от Триви (Сообщение 126069)
Не сразу заметил..
А зачем ты наструячил в подключаемом файле:
count();
alert(countOfFields)
???
Какой в этом тайный умыслел? =))

:)
alert, это просто для проверки, ну а
count();
наверное, чтобы функция выполнилась...:-?

Триви 12.09.2011 14:25

Цитата:

Сообщение от mgmarket (Сообщение 126086)
:)
alert, это просто для проверки, ну а
count();
наверное, чтобы функция выполнилась...:-?

Ты уверен? :no: :haha:

mgmarket 12.09.2011 14:38

Нет, не уверен, я вообще плохо знаю яву :( все больше как-то PHP ближе к душе, поэтому и обратился за помощью

mgmarket 12.09.2011 14:49

Цитата:

Сообщение от Триви (Сообщение 126090)
Ты уверен? :no: :haha:

Триви, можешь просто правильное решение написать, я все-равно сам боюсь не дойду...

walik 12.09.2011 15:38

Попробуйте:
<html>
<head>
<script src="script.js"></script>
<script>
count(<?php echo $perf?>);
alert(countOfFields);
</script>
</head>
</html>

В начале подключаете файл, а потом вызываете функцию. + в самом файле не надо вызывать функцию, только тут.

mgmarket 12.09.2011 18:27

Цитата:

Сообщение от walik (Сообщение 126120)
Попробуйте:
<html>
<head>
<script src="script.js"></script>
<script>
count(<?php echo $perf?>);
alert(countOfFields);
</script>
</head>
</html>

В начале подключаете файл, а потом вызываете функцию. + в самом файле не надо вызывать функцию, только тут.

не работает. Может по другому посмотрите. Мне нужна эта глобальная переменная чтобы выполнялся другой код, изменить его мне знаний не хватает, но смысл в том, что от значения этой глобальной переменной зависит количество добавляемых полей. Допустим есть уже два поля и тогда к ним нужно добавить только 3, соответственно в этой переменной должна быть цифра 2. Если будет 0, как есть по умолчанию, то скрипт добавляет 5 полей а это уже 7, что быть не должно. Вот сам код:
var countOfFields=0; // Текущее число полей
var curFieldNameId = 0; // Уникальное значение для атрибута name
var maxFieldLimit = 5; // Максимальное число возможных полей
function deleteField(a)
{
	// Получаем доступ к ДИВу, содержащему поле
	var contDiv = a.parentNode;
	// Удаляем этот ДИВ из DOM-дерева
	contDiv.parentNode.removeChild(contDiv);
	// Уменьшаем значение текущего числа полей
	countOfFields--;
	// Возвращаем false, чтобы не было перехода по сслыке
	return false;
}

function addField()
{
	// Проверяем, не достигло ли число полей максимума
	if (countOfFields >= maxFieldLimit)
	{
		alert("Число полей достигло своего максимума = " + maxFieldLimit);
		return false;
	}
	// Увеличиваем текущее значение числа полей
	countOfFields++;
	// Увеличиваем ID
	curFieldNameId++;
	alert(curFieldNameId);
	// Создаем элемент ДИВ
	var div = document.createElement("div");
	// Добавляем HTML-контент с пом. свойства innerHTML
	div.innerHTML = "<input name=\"name_" + curFieldNameId + "\" type=\"text\" size=\"3\" value=\"\">% <a onclick=\"return deleteField(this)\" href=\"#\">[X]</a>";
	// Добавляем новый узел в конец списка полей
	document.getElementById("parentId").appendChild(div);
	// Возвращаем false, чтобы не было перехода по сслыке
	return false;
}

Триви 12.09.2011 19:03

Код абсолютно рабочий.
У тебя основной файл на серваке .php?
Что тебе мешает присвоить JS-переменной countOfFields значение php-переменной $perf ?

var countOfFields=<?=$perf?>;


Ну не генерится же у тебя с помощью php подключаемый js-файл в котором передается это значение?!
Это ж глупость какая то..

mgmarket 13.09.2011 00:56

Решил проблему топором: скрипт из подключаемого файла тупо воткнул в код php, и присвоил переменной значение, все заработало :(
Всем спасибо за помощь.


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