echo "<td><a href='delete.php?id=$row[id]&&category=$a' onclick='return confirm(\'are you sure you wish to delete this record\');'>delete</a></td>";
Выше код, который я пытаюсь использовать. Каждый раз он ничего не делает, и я не вижу, как я могу использовать «правильные» методы JavaScript. Какова причина?






echo "<td><a href='delete.php?id=$row[id]&&category=$a' onclick='return confirm("are you sure you wish to delete this record");'>delete</a></td>";
Используйте выделение синтаксиса HTML в Firefox в ваших интересах. :-)
Да, черт возьми, это не сработает, потому что "$ row [id]" не будет правильно вычисляться в строке.
Также плохая идея использовать методы GET для изменения состояния - ознакомьтесь с рекомендациями о том, когда использовать GET, а когда использовать POST (http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist)
Верно. <input type = submit name = "delete_row_id_123"> можно использовать, чтобы избежать множественных форм со скрытыми полями, или <button name = delete value = 123> delete </button>, если вас не волнует IE.
Я думаю, что $ row [id] неправильно вычисляется в вашем операторе echo. Попробуй это:
echo "<td><a href='delete.php?id = {$row[id]}&&category=$a'...
Обратите внимание на волнистые скобки.
Но ЭТО гораздо легче читать:
?><td><a href = "delete.php?id=<?=$row[id];?>&category=<?=$a;?>" onclick = "return confirm('are you sure you wish to delete this record');">delete</a></td><?
Кроме того, добавьте в свой js функцию для обработки подтверждения:
function confirm_delete() {
return confirm('Are you sure you want to delete this record?');
}
Тогда ваш метод onclick может быть просто return confirm_delete().
Обратите внимание, что на большинстве серверов короткие теги php отключены. Следовательно, <? = Не будет работать.
По моему опыту, на большинстве серверов включены short_tags. Но каждому свое.
У меня тоже никогда не было проблем с short_tags. Согласно моему прочтению, короткие теги php.net/ini.core включены по умолчанию.
Бог поможет вам тогда, когда ваше приложение будет размещено на сервере, на котором нет коротких тегов.
@nickf Думаю, ты прав. Я собираюсь задать вопрос по этому поводу (при условии, что его еще нет).
Да, их будет чертовски заводить ^ _ ^
И если вы настаиваете на использовании эхо-штуки:
echo "<td><a href='delete.php?id=$row[id]&&category=$a' onclick='return confirm(\\'are you sure you wish to delete this record\\');'>delete</a></td>";
- потому что экранирование лечится из php-интерпретатора! -)
Нет, но php удаляет первую обратную косую черту, поэтому в коде, который попадает в браузер, написано: onclick = 'return confirm (\' вы уверены, что хотите удалить эту запись \ ');'
Другое решение:
echo '<td><a href = "delete.php?id=' . $row[id] . '&category=' . $a . '" onclick = "return confirm(\'are you sure you wish to delete this record?\');'>delete</a></td>';
Я заменил двойные кавычки на одинарные и наоборот. Затем я объединил переменные, чтобы PHP не нуждался в оценке.
Кроме того, я не уверен, действительно ли возврат onclick остановит «нажатие» ссылки, когда пользователь нажмет «нет».
Так и будет. если функция onclick ссылки возвращает false, действие отменяется. confirm () возвращает истину или ложь в зависимости от того, нажимает ли пользователь «ок» или «отменить».
Вот что я использую для того же типа вещей.
Я не повторяю / не печатаю его, я помещаю html между?> Html
?> <td><a href = "?mode=upd&id=<?= $row[id] ?>&table=<?= $table ?>">Upd</a> / <a href = "?mode=del&id=<?= $row[id] ?>&table=<?= $table ?>" onclick = "return confirm('Are you sure you want to delete?')">Del</a></td> <?php
Просто предложение, вы используете фреймворк?
Я использую MooTools, а затем просто включаю этот скрипт в HTML
confirm_delete.js
window.addEvent('domready', function(){
$$('a.confirm_delete').each(function(item, index){
item.addEvent('click', function(){
var confirm_result = confirm('Sure you want to delete');
if (confirm_result){
this.setProperty('href', this.getProperty('href') + '&confirm');
return true;
}else{
return false;
}
});
});
});
Все, что он делает, это находит любые теги «a» с class = «confirm_delete» и прикрепляет тот же код, что и ваш скрипт, но мне легче использовать. Он также добавляет переменную подтверждения к адресу, чтобы, если JavaScript отключен, вы все равно могли отправлять их на экран с запросом подтверждения.
ах, приятный штрих с добавлением дополнительной переменной в конце. Однако я склонен придерживаться мнения, что пользователи, у которых отключен JS, получают по заслугам.
Вы должны стараться как можно больше отделить свой JavaScript от HTML. Сначала выведите стандартный HTML-код, а затем добавьте событие в ссылку.
printf('<td><a id = "deleteLink" href = "delete.php?id=%d&category=%s">Delete</a></td>', $row["id"], $a);
А затем где-нибудь на странице какой-нибудь код JavaScript:
document.getElementById('deleteLink').onclick = function() {
return confirm("Are you sure you wish to delete?");
};
Однако из вашего примера похоже, что у вас, вероятно, есть таблица с несколькими строками, каждая со своей собственной ссылкой на удаление. Это делает использование этого стиля еще более привлекательным, поскольку вы не будете выводить текст confirm(...) снова и снова.
В этом случае очевидно, что вы не можете использовать id по ссылке, поэтому, вероятно, лучше использовать класс. <a class = "deleteLink" ...
Если вы использовали библиотеку JavaScript, например jQuery, это очень просто:
$('.deleteLink').click(function() {
return confirm("...");
});
Немного странный способ сделать это, но он будет работать - было бы разумнее использовать \ "или & apos; Также && должен быть & amp; и $ a может потребоваться кодировка url / html.