[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как передать строку в js функцию
faecker
Есть конструкция:

<p><a href="#?id='.$id.' onClick="func('.$id.')">ссылка</a></p>


В подключаемом js файле:

function func(id){
alert(id);
}


Если переменная $id имеет цифровое значение, то все работает.
Если переменная $id имеет строковое значение, то аргумент в js функцию не передается.
Как передать строку?
sergeiss
Цитата (faecker @ 16.09.2014 - 22:58)
Если переменная $id имеет строковое значение, то аргумент в js функцию не передается.
Как передать строку?

У тебя в коде, который формируется, нет скобок. Поэтому там получается что-то типа
func( 25 ) // будет работать
// или

func( abc ) // не будет работать, потому что JS будет пытаться найти переменную с таким именем


в коде так напиши
<p><a href="#?id='.$id.' onClick="func(\''.$id.\'')">ссылка</a></p>

насколько я понял, это у тебя формируется символьная строка, часть которой ты привел.

Я бы рекомендовал по-другому делать немного. Не пытаться сформировать HTML в виде большой символьной строки, а просто писать полноценный HTML, вставляя в нужном месте код ПХП.
Типа такого:
<p><a href="<?= $id ?>" onclick="func('<?= $id ?>')">ссылка</a></p>

Это будет намного нагляднее. И редактировать потом проще, и продвинутые системы, типа phpStorm, контролируют такой код.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
faecker
to sergeiss

Ничего у меня все равно не работает. Теперь alert выдает текст .$id. но не строковое значение переменной. Пытался понять и почитать, в чем смысл экранирования обратными слешами, тоже не понял, как это должно работать для данного случая.
Полный код у меня такой:

echo '<p><a href="#?id='.$row['id'].'&name='.$row['name'].'" ';
echo 'onClick="func('.$row['id'].', '.$row['name'].')"';
echo '>ссылка</a></p>';

То есть все это формируется в цикле. Не получается использовать чистый html с php вставками, потому что html формируется по-разному в зависимости от условий, полученных из бд.
Если использовать мой код выше - что там надо сделать, чтобы строковое значение переменной name передать в аргумент js функции?

В принципе проблема решается, если передать только id, а name получить потом лишним запросом из бд в обработчике, который и должна подгружать js функция. Но хотелось бы понять, почему число передается в js, а строка нет.
rooor
echo 'onClick="func('.$row['id'].', \''.$row['name'].'\')"';
sergeiss
Цитата (faecker @ 17.09.2014 - 00:09)
Но хотелось бы понять, почему число передается в js, а строка нет.

Вообще-то, я тебе уже написал, почему так:
Цитата (sergeiss @ 16.09.2014 - 23:14)
func( abc ) // не будет работать, потому что JS будет пытаться найти переменную с таким именем



_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
faecker
Спасибо! Теперь все работает.
faecker
Еще один вопрос по этой же теме.
Как сэкранировать конструкцию, чтобы теперь передать строковую переменную из js в php.

Из js в js работает:
onClick="func2('+id+',\''+name+'\')" - так можно передать строковую переменную из одной js функции в другую.


Из js в php почему-то не передается.
Пишу так:
$('#div').load('php/handler.php?id='+id+'&name=\''+name+'\'');

Числовая id передается, строковая name не передается.
Что не так?
SerginhoLD
лучше так, чтобы голову со строкой не ломать:
$('#div').load('php/handler.php', { 'id': id, 'name': name });


_____________
"internet explorer всех правильней отображает страницы" ©
faecker
to SerginhoLD

Вот! Вот так post запросом все работает. Спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.