2013-03-21 56 views
1

我有一個小問題,我做了一個刪除按鈕用PHP while循環看起來像這樣:JavaScript的confirm和而環回聲

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

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

} 

這個Echo的一些內容的一些刪除按鈕。不過,我需要用戶確認刪除第一個,這就是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))。 – 2013-03-21 15:59:27

+2

'r == true'是'=='的一個相當無意義的用法;在布爾上下文中評估的'r'應該得到相同的結果。如果你確實需要比較'true',那麼使用'r === true'。 – cdhowie 2013-03-21 16:00:47

回答

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?"); 
} 

編輯:如果你想要一個更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'元素中使用'button'工作? – 2013-03-21 16:05:17

+2

是剛測試[這個小提琴](http://jsfiddle.net/74AgN/1/) – 2013-03-21 16:12:56

+1

@MarcelKorpel我認爲從內嵌'onclick'處理程序'技術上'返回false'將停止傳播,因此甚至不讓' '知道什麼被點擊...因此工作 – Ian 2013-03-21 16:13:00

1

你需要停止/刪除當前點擊事件。在您的代碼執行後,事件會陷入錨點並觸發點擊。使用MooTools只需添加'new Event()。stop();'。我認爲jQuery也有類似的東西。

編輯:HanletEscaño是正確的。您可以返回true(瀏覽器將重定向到href中的URL,或false以讓瀏覽器不執行任何操作)

+1

「*匯*」?正確的術語是「事件冒泡* *」,然後單擊已觸發 – Bergi 2013-03-21 16:05:53

1

爲了防止HTML鏈接工作,您必須在您的js函數中返回false或event.preventDefault()其中事件是傳遞給點擊事件函數的參數

在a元素上放置單擊事件而不是在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 =「返回delconfirm( );「' – Ian 2013-03-21 16:06:23

+0

@ Ian Right。幸運的是,事件對象*上的兩個方法調用應該足夠用於任何現代瀏覽器。 – cdhowie 2013-03-21 16:07:14

+0

哈哈......希望他們夠了:) – Ian 2013-03-21 16:07:47