2013-03-06 4 views
0

У меня есть программа, которая требует, чтобы я непрерывно посылал массив назад и вперед с экрана на сервер. Массив важен, поэтому мне это нужно.Как передать массив javascript в onclick = "('here')"?

Итак, он начинается как php-массив в onclick -> он переходит в javascript и снова вызывает функцию php, а затем возвращает ее обратно в функцию javascript. Здесь я потерялся. После того, как массив php будет возвращен, я пытаюсь вернуть его в onclick, чтобы при повторном щелчке пользователя новый массив отправляется с помощью onclick.

Как я могу это сделать?

Что я до сих пор:

В JavaScript, после того, как сообщение об успешном получении и функция PHP предоставляет новый массив у меня есть что-то вроде этого установить, где тзд держит значения. msg.question_id содержит только целое число, msg.array содержит массив php.

document.getElementById('buttons').innerHTML ="<a href='javascript:void(0)' onclick=\"movie_guess('yes',"+msg.question_id+","+msg.array+")\"><img src=\"/assets/yes.png\" ></a><a href=\"javascript:void(0)\" onclick=\"movie_guess('no',"+msg.question_id+","+msg.array+")\"><img src=\"/assets/no.png\" ></a> "; 
+1

Не используйте ' OnClick = "" '. Добавить прослушиватель событий. –

+0

Не знаете, как связан PHP. –

+0

php связан, потому что я использую ajax, делая вызов функции php. Когда он возвращается, он возвращает его как массив из php –

ответ

2

Ну, я думаю, вы не должны возвращать массив PHP в ответ ajax. Вы можете отправить его как строку с разделителем. При успешном ответе вы можете разбить их и создать массив javascript. Вы также можете использовать JSON. Кодируйте его для доступа к нему.

$phpArr=(0 => 'Zero', 1 => 'One', 2 => 'Two'); // PHP Code 
var jsArr= <?php echo json_encode($phpArr); ?>; // Javascript Code 
for($i=0;<stop-condition>;$i++){  alert(jsArr[i]); } // Javascript Code 
0

Это элемент, который вы пытаетесь добавить, правильно отступом:

<a href='javascript:void(0)' onclick=\"movie_guess('yes',"+msg.question_id+","+msg.array+")\"> 
    <img src=\"/assets/yes.png\" > 
</a> 
<a href=\"javascript:void(0)\" onclick=\"movie_guess('no',"+msg.question_id+","+msg.array+")\"> 
    <img src=\"/assets/no.png\" > 
</a> 

Вместо этого, вы можете добавить его без обработчиков (я также использовал # в качестве цели ссылки; также отметить, как я избежать необходимости экранировать кавычки и как вы можете разбить длинные строки на несколько строк):

var buttons = document.getElementById('buttons'); 
buttons.innerHTML = 
    '<a href="#"><img src="/assets/yes.png"></a>'+ 
    '<a href="#"><img src="/assets/no.png"></a>' 

затем добавить обработчик событий как функция. Это улучшает производительность и позволяет передавать все видимые из текущей области (я предполагаю, что msg является объектом javascript и что он не изменяется). addEventListener имеет другие преимущества по сравнению с onclick=function(){...}, а также:

var links = buttons.getElementsByTagName("a"); 
links[0].addEventListener("click", function(){ 
    movie_guess('yes', mgs.question_id, msg.array); 
}); 
links[1].addEventListener("click", function(){ 
    movie_guess('no', mgs.question_id, msg.array); 
}); 

более длинный, но более быстрая версия будет не трогать innerHTML вообще, и манипулировать DOM вместо:

var buttons = document.getElementById('buttons'); 
var aYes = document.createElement("a"); 
aYes.href = "#"; 
aYes.addEventListener(...); 
var imgYes = document.createElement("img"); 
imgYes.src = "/assets/yes.png"; 
aYes.appendChild(imgYes); 
buttons.appendChild(aYes); 
var aNo = document.createElement("a"); 
... 
Смежные вопросы