2013-11-13 7 views
0

На моем сайте я использую событие onclick по ссылке для вызова функции javascript (ссылки находятся в цикле WHILE из внешнего php-файла). Onclick из цикла php WHILE передает изображение пользователя и имя пользователя в функцию javascript, называемую ShowUser(). Событие правильно генерирует имя и фотографию и помещает его в innerHTML из DIV следующим образом:Как передать динамически сгенерированную переменную функции внутри innerHTML функции javascript?

<script language="javascript" type="text/javascript"> 
function ShowUser(userpic,username) { 
var TitleDesc1 = 'Click this photo to learn more about '+username+''; 
document.getElementById('UserPicHolder').innerHTML = '<img class="TipTip"  
title="'+TitleDesc1+'" src="'+userpic+'" style="width:60px; height:66px" alt="user 
picture">'; 
} 
</script> 

Это работает правильно. Тем не менее, когда я пытаюсь сделать картинку пользователя кликабельной (onclick # 2) (добавив href), чтобы показать статистику сайта пользователя, функция не открывает окно статистики (div, который должен быть скрыт до тех пор, пока onclick # 2 (DisplayUserStats) в яваскрипте функции):

<script language="javascript" type="text/javascript"> 
function ShowUser(userpic,username) { 
var TitleDesc1 = 'Click this photo to learn more about '+username+ ''; 
document.getElementById('UserPicHolder').innerHTML = '<a href="#null"  
onclick="DisplayUserStats("'+username+'")"><img class="TipTip" title="'+TitleDesc1+'"  
src="'+userpic+'" style="width:60px; height:66px" alt="user picture"></a>'; 
} 
</script> 

Абонентская Статистика Box ДИВ становится видимыми, как и следовало ожидать, когда функция DisplayUserStats() пусто (как DisplayUserStats()), но, конечно же, статистика не определена, так как не имя пользователя была определена. Только когда в DisplayUserStats() помещается, казалось бы, ЛЮБОЙ контент, который не раскрывает div окна статистики (например, DisplayUserStats (dummystring) не открывает div Stats. Обратите внимание, что я пробовал несколько других конкатенаций (считая, что я сделал это неправильно) например, + имя пользователя + '+ имя пользователя + имя пользователя и т.д. может кто-то пожалуйста, пролить некоторый свет на то, как переменная имя пользователя могут быть переданы в функции DisplayUserStats()?

+0

Сложно сказать, что именно вы пытаетесь сделать здесь. – Pointy

+0

Я хочу передать имя пользователя функции DisplayUserStats(). Я могу передать имя пользователя для функций, вызываемых вне innerHTML, но я не могу передать имя пользователя в DisplayUserStats(), функцию, которая вызывается внутри innerHTML. –

+0

Хорошо проверите @ bfavaretto ответ - также если эта строка с обновленным контентом действительно разбита на несколько строк в вашем реальном источнике, ну, вы не можете этого сделать. – Pointy

ответ

2

было бы действительно выглядеть чище, если не использовать встроенный обработчики событий, но проблема в том, что у вас есть двойные кавычки внутри двойных кавычек (таким образом нарушается HTML):.

<a href="#null" onclick="DisplayUserStats("SomeUsername")">... 

вы можете исправить, что с этим уродливая вещь:

onclick="DisplayUserStats(\''+username+'\')"> 

Кроме того, не разбивайте строки при определении строк JavaScript, иначе код не будет выполнен.

+1

Похоже, что строковая константа (строка содержимого) разбита на пару строк ... – Pointy

+0

Спасибо bfavaretto ... она отлично работала. Один вопрос: я читал во многих местах точно так же, как вы говорили о разрыве строк с строками Javascript. Однако (и я не сомневаюсь в том, что вы говорите) Я несколько раз нарушал это правило в своем коде, и код по-прежнему работает правильно в каждом браузере. Любые мысли о том, почему это может быть так? –

+0

@ ChemBlob9999 Вы уверены? [Этот простой пример] (http://jsfiddle.net/t5AW2/) наверняка ломается (откройте консоль, чтобы увидеть ошибку). – bfavaretto

Смежные вопросы