Confirm delete via AJAX
The correct way to fix this issue is to is to attach a JavaScript watch to the button and have the trigger make a confirm dialog pop up and then make a JavaScript request from the user's browser back to a URL with a parameter of the element to be deleted at the end of it, then fade out the rows from the HTML table and make sure the zebra striping is correct, then secure that second URL to have the same permissions as the original page, then receive the parameter at the called URL and process the callback you had originally intended to run:

PHP:

onclick="Drupal.dccAdmissions_confirm_delete('$rec-&gt;pi_firstname $rec-&gt;pi_lastname', '$rec-&gt;pi_id . ', '$rec-&gt;pi_id', jQuery(this) );


JavaScript:

( function($) {
  Drupal.dccAdmissions_confirm_delete = function( in_name, id, object ) {
    if ( confirm( 'Do you want to delete the application for ' + in_name + '?' ) ) {
      $.ajax({
        type: 'GET',
        url: '/admissions/application/delete/' + id,
        success: function(data) { 
          if ( data == 'DELETED' ) {
            // Remove the specific row
            $(object).parents('tr').fadeOut( 1000 );
            $(object).parents('tr').remove();
            $('#dccadmissions-application-management-form tr:nth-child(odd)').addClass( 'odd' );
            $('#dccadmissions-application-management-form tr:nth-child(odd)').removeClass( 'even' );
            $('#dccadmissions-application-management-form tr:nth-child(even)').addClass( 'even' );
            $('#dccadmissions-application-management-form tr:nth-child(even)').removeClass( 'odd' );
          } else {
            alert( 'Delete failure: ' + data );
          }
        } 
      }); 
    }
  }
  Drupal.dccAdmissions_confirm_reset = function( in_name ) {
    return confirm( 'Do you want to reset the application for ' + in_name + '?' );
  }
})(jQuery);


Make a menu hook:

function dccAdmissions_menu() {
  $items['admissions/application_management'] = array (
    'title' =&gt; t("Admissions Online Application Management"),
    'page callback' =&gt; 'dccAdmissions_application_management_content',
    'type' =&gt; MENU_CALLBACK,
    'access callback' =&gt; 'dccInGroup',
    'access arguments' =&gt; array( 'Admissions' ),
  );


Check your cases:

/*
 * Page callback for application management pages.
 */
function dccAdmissions_application_management_content( $arg1 = 'new', $arg2 = 0, $arg3 = '' ) {
  include_once "application-management.data.inc";

  $module_path = drupal_get_path( 'module', 'dccAdmissions' );
  $output = array(
    '#attached' =&gt; array(
      'css' =&gt; array( $module_path . '/css/application-management.css', ),
      'js'  =&gt; array( $module_path . '/js/application-management.js', ),
    ),
  );

  switch( $arg1 ) {
    case 'delete':
      $message = _dccAdmissions_application_management_delete( $arg2 );
      return drupal_json_output( $message );
      break;


Then delete your data:

function _dccAdmissions_application_management_delete( $id ) {
//... your delete code here...