Функция JS с PHP vars onclick в теге <a>не работает - PullRequest
0 голосов
/ 25 марта 2012

Следующий код находится в одном файле PHP:

<head>
<script type="text/javascript" src="jquery.js">
function pipeDelete(topicid, msgid, action) {
  if (topicid == 0) {
    var ans = confirm("Delete the topic?");
  } else {
    var ans = confirm("Delete this comment?");
  }
  if (ans) {
    var dest = 'msg_transact.php';
  $.post(dest, {topicid:topicid, msgid:msgid, action:action}, function() {
    $("#" + msgid).hide("slow");
          });
  }
}
</script>
</head>
<?php
// some code, $row['topic_id'] and $row['msg_id'] are integers
while ($row = mysql_fetch_assoc($result)) {
  // some code
  echo '<div id="' . $row['msg_id'] . '">';
  $deletelink = '<a href="#" onclick="pipeDelete(\'' . $row['topic_id'] .
    '\', \'' . $row['msg_id'] . '\', \'deletepost\')">Delete</a>';
  // some code
  echo $deletelink;
  echo '</div>';
}
?>

Проблема заключается в том, что, когда я нажимаю ссылку "Удалить", страница просто перезагружается (в конце добавляется '#' в концеURL) и ничего не происходит.Событие onclick не запускается и функция не вызывается.Я не думаю, что jquery или // некоторый код вмешивается, потому что для этого мне нужно хотя бы получить поле со списком, не так ли?

В чем проблема, которая останавливает нажатие кнопки мыши?событие при вызове функции JS?

РЕШЕНИЕ: напишите 2 отдельных тега сценария - один для jquery src, а другой для js-кода.<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript">/* javascript code */</script>

Ответы [ 3 ]

2 голосов
/ 25 марта 2012

onclick необходимо "return false" для предотвращения действия по умолчанию (после # якоря там)


Теперь, похоже, вы используете jQuery.Тем не менее, почему бы не сделать ненавязчивый код, предполагая, что вы используете html5?:)

Обратите внимание, что идентификатор не должен быть только числовым в HTML

<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $('.deletelink').click(function(e){
     e.preventDefault();
     var topicid = $(this).attr('data-row'), msgid = $(this).attr('data-msg'), action = $(this).attr('data-action');
  if (topicid == 0) {
    var ans = confirm("Delete the topic?");
  } else {
    var ans = confirm("Delete this comment?");
  }
  if (ans) {
    var dest = 'msg_transact.php';
  $.post(dest, {topicid:topicid, msgid:msgid, action:action}, function() {
    $("#row-" + msgid).hide("slow");
          });
  }
  }); 
</script>
</head>
<?php
// some code, $row['topic_id'] and $row['msg_id'] are integers
while ($row = mysql_fetch_assoc($result)) {
  // some code
  echo '<div id="row-' . $row['msg_id'] . '">';
  $deletelink = '<a href="#" data-row="' . $row['topic_id'] . '" data-msg="' . $row['msg_id'] . '" data-action="deletelink" class="deletelink">Delete</a>';
  // some code
  echo $deletelink;
  echo '</div>';
}
?>

См. Пример, соответствующий псевдо-html, сгенерированному на this jsfiddle

1 голос
/ 25 марта 2012

два варианта:

замените "#" на "javascript:pipeDelete(..)" и удалите атрибут onclick или добавьте событие click через jquery, где вы можете предотвратить поведение по умолчанию.

например:

$('#button').click(function(e){
  // do stuff
  ....
  e.preventDefault(); // prevents the default behaviour of a link
});
0 голосов
/ 25 марта 2012

Проблемы ЗДЕСЬ:

$("#" + msgid + "\"").hide("slow");

Изменить на:

$("#" + msgid).hide("slow");

И здесь:

$row['msg_id'] . '\', \"deletepost\")">Delete</a>';

Изменить на:

$row['msg_id'] . '\', \'deletepost\')">Delete</a>';

А здесь:

<script type="text/javascript" src="jquery.js">

Изменить на:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">

См .: http://jsfiddle.net/AUTrX/

Вам не нужно менять "#" илиreturn false; - "#" НЕ будет перезагружать страницу, она просто перемещает страницу туда, где находится внутренний якорь, если вы его указали и указали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...