2011-04-13 82 views
0

爲什麼沒有達到fadeOut的功能?每次運行該函數時,都會刷新頁面而不是使用AJAX。我知道這可能是一個微不足道的問題,但我卡住了。任何幫助將使我得到一個良好的睡眠。感謝爲什麼不能達到這個功能?

<script type="text/javascript"> 


function deleterow(id){ 
if (confirm('Are you sure want to delete?')) { 
$.post('delete.php', {id: +id, ajax: 'true' }, 
function(){ 
$("#row_"+id).fadeOut("slow"); 
}); 
} 
} 

</script> 

這裏是由PHP輸出HTML:

<button onclick="deleterow('.$entry['rowid'].')" class="fg-button fg-button-icon-left ui-state-default ui-corner-all"><span class="ui-icon ui-icon-trash"></span></button> 
+2

檢查JavaScript控制檯中的錯誤。 – 2011-04-13 03:55:49

+3

'id:+ id'看起來像是錯誤。 – 2011-04-13 04:20:33

+0

這與你的報價嵌套三個深度的事實有什麼關係?即「''沒有註冊的部分''」也許嘗試轉義那些引號? – 2011-04-13 04:52:02

回答

3

它很難肯定說沒有看到代碼/ HTML調用的功能,但我想這是連接到onclick處理器不知何故。因此,如果您不阻止默認操作(在a標記的href之後),它將刷新頁面。您需要從處理函數返回false或從中調用event.preventDefault()

我會用這個標記來代替:

<button 
    value="$entry['rowid']" 
    class="fg-delete fg-button fg-button-icon-left ui-state-default ui-corner-all"> 
    <span class="ui-icon ui-icon-trash"></span> 
</button> 

通過在DOM編碼(在這種情況下value)的ROWID,我們可以在我們的函數訪問它,而不必硬編碼到函數調用保持處理器不顯眼。

// pulling this into a full definition for clarity 
// you could of course just use an anon function inside you $.click call 
function handleDelete(event){ 
    event.preventDefault(); 
    var $this = $(this); 
    var rowId = $this.val(); 
    deleterow(rowId); 
    return false; 
} 


$('button.fg-delete').click(handleDelete); 

演示:http://jsfiddle.net/eBa7v/1/

+0

是的,這是正確的,我正在使用一個按鈕onclick。我想過要做preventDefault()。我是否必須通過函數參數傳遞事件? – 2011-04-13 03:55:47

+0

是的,事件處理程序將事件對象作爲它們的唯一參數,但是您可以指定任意數據的散列以在該事件對象內傳遞......發佈您的標記,我可以舉一些例子。 – prodigitalson 2011-04-13 03:56:59

+1

只是'返回false'; – jcane86 2011-04-13 03:58:48