JavaScript: динамические имена переменных с php? - PullRequest
0 голосов
/ 29 декабря 2011

Вероятно, мертвый простой и идиотский вопрос (я совершенно новичок в javascript):

У меня есть этот код, который загружает новое сообщение, нажимая ссылку "далее" или "назад". Переменная clickks используется для прокрутки вверх и вниз в операторе sql-limit (с использованием функции swapContent), что означает, что вы перемещаетесь назад или вперед в базе данных, щелкая ссылки. Работает легко и отлично:

<script type="text/javascript">
var clicks = -1;
function increase()
{
    clicks++;
    return false;
}
function decrease()
{
  clicks--;
  return false;
}
</script>
<div id="<?php echo $post['id'].'-multipost'; ?>">
 <?php include('views/posts/_postmultipost.php'); ?>
</div>
<div id="<?php echo $post['id']; ?>-next" class="rightbutton" style="display:block;">
 <a href="#" onmousedown="increase(); javascript:swapContent('next', clicks, '<?php echo $post['id']; ?>', '<?php echo $post['title']; ?>', '<?php echo $_SESSION['user']['id']; ?>');">next</a>
</div>

<div id="<?php echo $post['id']; ?>-back" class="leftbutton" style="display:none;">
 <a href="#" onmousedown="decrease(); javascript:swapContent('back', clicks, '<?php echo $post['id']; ?>', '<?php echo $post['title']; ?>', '<?php echo $_SESSION['user']['id']; ?>');">back</a>
</div>

Единственная проблема: как видите, у меня есть несколько постов (post-ID). Но javascript var «щелкает» всегда одинаково. Как мне добавить post-id в имя переменной javascript «клики», ну как-то так:

var <?php echo $post['id']; ?>-clicks = -1;

Конечно, это не работает, но я понятия не имею, как с этим справиться. Любой совет? Извините за этот глупый вопрос ...

Спасибо за вашу помощь!

UPDATE

Хорошо, получил решение: Брайан был прав !!!

Изменен код на:

<script type="text/javascript">
var clicks = {};
clicks['<?php echo $post['id']; ?>'] = -1;
function increase()
{
    clicks['<?php echo $post['id']; ?>']++;
    return false;
}
</script>

Javascript в html остается без изменений:

<a href="#" onmousedown="increase(); swapContent('next', clicks, '<?php echo $post['id']; ?>', '<?php echo $post['title']; ?>', '<?php echo $_SESSION['user']['id']; ?>');">></a>

Clicks теперь является объектом и выведет следующее в swapContent-Function:

count: Array
(
    [80] => 0
)

В php вы получите доступ к значению, как это:

foreach($count as $key=>$value) { $count = $value }

В javascript он выглядит немного по-другому:

for(x in clicks)
{
   var clicks = clicks[x];
}

Кажется, теперь работает отлично, спасибо за вашу помощь !!

Ответы [ 3 ]

0 голосов
/ 29 декабря 2011

Насколько я понимаю, вы пытаетесь получить это:

var something-clicks = -1;

Но в JS something-clicks есть выражение - вычитание двух переменных.Имена токенов в JS не могут содержать «-», в отличие от CSS.

0 голосов
/ 29 декабря 2011

У вас есть синтаксическая ошибка:

onmousedown="increase(); javascript:swapContent('next', clicks, '<?php echo $post['id']; ?>', '<?php echo $post['title']; ?>', '<?php echo $_SESSION['user']['id']; ?>');"

что javascript: это проблема. Ожидается, что это свойство будет содержать необработанный JS, и этот токен недействителен. javascript, используемый в качестве протокола, предназначен для использования в свойстве href тега a.

Кроме этого, все выглядит хорошо. Просто наберите clicks в консоли JS вашего браузера, чтобы получить текущее значение. Или добавьте console.log('clicks:', clicks); к своей функции, чтобы результат выводился при каждом нажатии.

0 голосов
/ 29 декабря 2011

Я не очень знаком с PHP, поэтому я не знаю о php echo. Однако сработает ли использование объекта?

var postClicks = {};

postClicks['<?php echo $post['id']; ?>'] = -1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...