Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > пробелы при передачи параметров функции


Автор: tired 21.4.2008, 11:18
пребположим есть функция:
 FIO(Name,Dolzhnost)
{
alert(Name + "-" Dolzhnost)
}
если вызывать ее в таком виде: FIO('Иван Иванов', 'Слесарь') то в месте "Иван Иванов" будет ошибка из-за пробела. Решение проблемы возможно если вместо пробела поставить "_" но тогда получается не красиво: Иван_Иванов-Слесарь. может есть какая нить встроиная константа заменяющая символ пробела?

Автор: bars80080 21.4.2008, 11:30
не может быть такой проблемы, косяк в другом месте

(интересно, что проблемы с пробелом часто происходят, когда на серверной стороне формируется инпутбокс, у которого указывается атрибут value либо без кавычек, либо с кавычками, но при этом в самом подставляемом значении тоже есть кавычки)

кстати, 
Код

FIO(Name,Dolzhnost) {
alert(Name + "-" + Dolzhnost); 
}
 пропустил ещё один плюс, опечатка?

Автор: tired 21.4.2008, 18:45
опечатка...
если косяк в другом месте то почему после того как я заменю " " на "_" ошибка не выскакивает?
кста ошибка определяеться как "Незавершенная строковая константа"

Добавлено через 2 минуты и 46 секунд
вобщем вот весь скрипт:
Код

<script language="javascript">
function ShowItem()
{
parent.main.location.href="ShowItem.htm";
};
function move_par(ItemName,ItemCost,ItemType,ItemImage)
{
var ItemName;
var ItemCost;
var ItemType;
var ItemImage;
var a = ItemName;
var b = ItemCost;
var c = ItemType;
var d = ItemImage;
parent.main.document.forms[0].ItemName.value = a;
parent.main.document.forms[0].ItemType.value = c;
parent.main.document.forms[0].ItemCost.value = b;
parent.main.document.forms[0].ItemImage.src = d;};
</script>

вот вызов функции:
Код

<a href="javascript:ShowItem()" onClick=setTimeout("move_par('Counter-Strike',299,'Action','imgCS.jpg')")>Counter-Strike</a>

если вместо "-" в Counter-Strike поставить " " то вылезет ошибка. why???

Автор: Fortop 21.4.2008, 20:51
приведи весь текст формы. 

Подозреваю, что твоя проблема в это строке. Так как твой ItemName  содержит пробел.
parent.main.document.forms[0].ItemName.value = a;

Автор: ksnk 21.4.2008, 23:07
Может так
Код

parent.main.document.forms[0][ItemName].value = a;
?

Автор: tired 21.4.2008, 23:17
Fortop, я поэтому тему и создал что не знаю как от этого пробела избавиться кроме как заменить его "_" =))
вариант предложенный ksnk не помогает=((
вот вся страница:
Код

<html>
<head><title></title>
<link href="a.css" rel="stylesheet" type="text/css">
<script language="javascript">

function ShowItem()
{
parent.main.location.href="ShowItem.htm";
};
function move_par(ItemName,ItemCost,ItemType,ItemImage)
{
var ItemName;
var ItemCost;
var ItemType;
var ItemImage;
var a = ItemName;
var b = ItemCost;
var c = ItemType;
var d = ItemImage;
parent.main.document.forms[0].ItemName.value = a;
parent.main.document.forms[0].ItemType.value = c;
parent.main.document.forms[0].ItemCost.value = b;
parent.main.document.forms[0].ItemImage.src = d;};
</script></head>
<body bgcolor="#000000">
<center>
<form>
<p class="orDizzz12pt">Выберите игру:</p>
<br>
<a href="javascript:ShowItem()" onClick=setTimeout("move_par('Counter Strike',299,'Action','imgCS.jpg')")>Counter-Strike</a>
<br>
<a href="javascript:ShowItem()" onClick=setTimeout("move_par('QuakeIII',199,'Action','QuakeIII.bmp')")>Quake III</a>
<br>
<a href="javascript:ShowItem()" onClick=setTimeout("move_par('Bioshock',449,'Action','Bioshock.jpg')")>Bioshock</a>
<br>
<a href="javascript:ShowItem()" onClick=setTimeout("move_par('Prince_of_Persia-Warrior_Within',399,'Action','PoPWW.bmp')")>Prince of Persia - Warrior Within</a>
<br>
<a href="javascript:ShowItem()" onClick=setTimeout("move_par('Prince_of_Persia-The_Two_Thrones',449,'Action','PoPTTT.jpg')")>Prince of 
Persia - The Two Thrones</a>
<br><br><br>
<a href="Menu.htm" onClick="parent.main.location.href='MainFrame.htm'"><h3>На главную<h3></a>
</form>
</center>
</body>
</html>

это типа онлайн магазин на JavaScript.задали в универе сделать. впринципе и так потянет но хочеться чтобы было все красиво.

Автор: ksnk 22.4.2008, 07:52
Еще раз
Цитата(Fortop @  21.4.2008,  20:51 Найти цитируемый пост)
приведи весь текст формы. 

Это - не форма, а какое-то недоразумение smile Зачем она здесь вообще - не ясно. Что написано в этом parent.main.document.form[0]?

А зачем тут setTimeout?

Автор: tired 22.4.2008, 09:48
setTimeout тут для того чтобы фрэйм успевал прогрузиться и в него потом вписываються программно параметры. если небудет setTimeout будет ошибка типа "Обьект не найден или null". тэги формы мона и опустить впринципе без них тоже работает.
и давайте не уезжать далеко от темы...вопрос как вы помните был про пробелы при передаче параметров функции  smile 

Автор: bars80080 22.4.2008, 10:44
грубо говоря логика системы настолько изощрённая, что мало кто с может дать внятный ответ

даже не влезая в её смысл, вызывает серьёзный вопрос:
зачем некоторому элементу формы с неизвестным заранее именем присваивать значение - тоже самое имя

и тебе кстати ответили, у тебя в строке parent.main.document.forms[0].ItemName.value = a; получается разрыв, если ItemName будет содержать пробел, потому и ошибка

Автор: tired 22.4.2008, 21:35
чорт как то криво первый раз отправил=(((
логика в следущем:
1 скрипт-ShowItem():
загружает в фрэйм документ-шаблон для всех товаров.
2 скрипт-move_par():
передает в фрэйм параметры на основе которых формируеться контент документа-шаблона. seTimeout нужен для того чтобы успевал прогружаться документ-шаблон иначе ошибка объект не найден.

bars80080, элемент известен - это ItemName - текстовое поле. оно находиться в документе-шаблоне, нужно для вывода в него названия товара по ссылке которого был совершен клик.
еще один вопрос: константа "%20" это же пробел? как и где он может использоваться?

Автор: bars80080 23.4.2008, 09:31
Цитата(tired @  22.4.2008,  21:35 Найти цитируемый пост)
элемент известен - это ItemName - текстовое поле
 если это элемент, почему ему как переменной присваивается некоторое значение?


Цитата(tired @  22.4.2008,  21:35 Найти цитируемый пост)
константа "%20" это же пробел? как и где он может использоваться?
 в url, т.е. в принципе можно заменить пробелы на него, а на сервере пропустить через соотв.функцию, но т.к. судя по всему он будет находиться в имени элемента, гарантировтаь нормальную работу не могу

Автор: tired 23.4.2008, 11:28
bars80080,parent.main.document.forms[0].ItemName.value = a; - эта строчка присваивает не элементу значение а свойству элемента(ООП понимаешь ли=)))все работает кроме варианта с пробелом...как быть?(

Автор: Fortop 23.4.2008, 13:15
tired
document.getElementById()
это работает, поскольку на прошлой неделе сам с похожим воевал, правда в jQuery, где $('#Clutha Gold') воспринималось несколько неадекватно

Добавлено через 2 минуты и 56 секунд
Да, и конечно можешь попробовать getElementsByName(), но его я не проверял

Автор: smartov 23.4.2008, 14:47
tired, используйте getElementById... И мой совет - лучше это делать всегда, а про запись document.forms[0]... забыть как страшный сон.
А так же getElementsByName() и getElementsByTagName()

Автор: tired 23.4.2008, 17:46
Fortopsmartov а можно поподробнее как это использовать?
с кодом и коментами желательно

Автор: smartov 23.4.2008, 18:04
tired, а у вас провайдер google забанил?

Автор: Fortop 24.4.2008, 06:04
Цитата(tired @  23.4.2008,  17:46 Найти цитируемый пост)
Fortop, smartov а можно поподробнее как это использовать?
с кодом и коментами желательно 

Что тут более "подробного"?

Извлекать объект не этим
Код

parent.main.document.forms[0].ItemName


а этим кодом.
Код

parent.main.document.getElementById(ItemId)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)