2013-03-21 2 views
1

У меня есть небольшая проблема, я сделал кнопку удаления с PHP то время как цикл, который выглядит следующим образом:Javascript подтверждает и в то время как петельное эхо

while($something = mysql_fetch_array($sql_something)){ 

    $id = $something['id'] 
    echo '<a href="somewhere.php?id='.$id.'"><button onclick="delconfirm()">Delete</button></a> 

} 

это Эхо несколько удаления кнопок для некоторого содержимого. Однако мне нужно подтверждение пользователя для удаления первых, это где onclick="delconfirm()" приходит в

мой подтверждения выглядит следующим образом:.

function delconfirm() 
{ 
    var r=confirm("Are you sure you want to delete this content?"); 

    if (r==true){ 

     // ...do nothing i guess? it needs to redirect using the PHP echo'd link... 

    } 
    else{ 

     window.location = "edit.php"; 

    } 
} 

Однако нажата ли отменить или хорошо, это будет удалить его в любом случае. Как я могу это исправить?

+0

Обратите внимание, что функции 'mysql_ *' устарели (см. [Красный квадрат] (http://php.net/mysql_query)). –

+2

'r == true' - довольно бессмысленное использование' == '; 'r', оцененный в булевом контексте, должен иметь тот же результат. Если вам действительно нужно точно сравнить с «true», используйте «r === true». – cdhowie

ответ

6

Изменить его к этому:

while($something = mysql_fetch_array($sql_something)){ 

    $id = $something['id'] 
    echo '<a href="somewhere.php?id='.$id.'"><button onclick="return delconfirm();">Delete</button></a> 

} 

И тогда ваша функция:

function delconfirm() 
{ 
    return confirm("Are you sure you want to delete this content?"); 
} 

EDIT: Если вы хотите более unobtrusive решение:

while($something = mysql_fetch_array($sql_something)){ 

    $id = $something['id'] 
    echo '<input type="button" value="Delete" data-id="$id" />'; 

} 

И то некоторые Javascript, чтобы связать событие:

function bindButtons() { 
    var buttons = document.getElementsByTagName("input"); 
    for (var i = 0; i < buttons.length; i++) { 
     if (buttons[i].type == "button") { 
      buttons[i].onclick = function() { 
       location.href='somewhere.php?id=' + this.getAttribute("data-id"); 
      } 
     } 
    } 
} 

и привязать его к window.onload, согласно Яну предложению:

window.onload = bindButtons; 

Примечания: Если вы используете JQuery это решение было бы проще и более элегантный.

Working jsFiddle

+1

Работает ли это с кнопкой '' в элементе 'a'? –

+2

Да, просто протестирован с [этой скрипкой] (http://jsfiddle.net/74AgN/1/) –

+1

@MarcelKorpel Я думаю, что технически 'return false' от встроенного обработчика onclick прекратит распространение, поэтому даже не допустит' 'знаю, что что-то было нажато ... поэтому работает – Ian

1

Вы должны остановить/удалить текущее событие щелчка. После того, как ваш код будет выполнен, событие опускается до привязки и вызывает щелчок. С помощью MooTools просто добавьте новое событие(). Stop(); '. Я думаю, что у jQuery есть что-то вроде этого.

EDIT: Hanlet Escaño является правильным. Вы можете вернуть true (браузер перенаправляет URL-адрес в href или false, чтобы браузер не делал ничего)

+1

"* раковины *"? Правильный термин - «событие * bubbling *», и клик уже был запущен – Bergi

1

Чтобы не допустить, чтобы ссылка HTML работала, вы должны вернуть false в функцию js или event.preventDefault(), где событие является аргументом, который передается функции события щелчка

Я сделал тонкий, когда ставил событие click на элемент a, а не на элемент внутри тега. Но это может сработать.

2

Если пользователь нажимает кнопку «Отмена», вам необходимо остановить событие от выполнения действий, которые обычно выполняются. Попробуйте это, например:

function delconfirm(e) { 
    e = e || window.event; 

    if (!confirm("Are you sure you want to delete this content?")) { 
     e.preventDefault(); 

     // This will prevent the event from bubbling up to the <a>. 
     e.stopPropagation(); 

     return false; // For the ancient/crappy browsers still out there. 
    } 

    return true; 
} 
+0

Для того, чтобы любое из 'return'ing работало, это означает, что кнопке также потребуется' return' - 'onclick =" return delconfirm (); ' – Ian

+0

@ Правильно. К счастью, два вызова метода для объекта события * должны быть достаточными для любого современного браузера. – cdhowie

+0

Ха-ха точно ... надеюсь, их достаточно :) – Ian