2011-01-30 3 views
1

を確認していない:jqueryのUIダイアログ確認が、私は自分のページにこのリンクを持っている

<a href='/Admin/Users/Delete/123' class='confirm'>Delete</a> 

<div id="dialog-confirm" title="Delete this user?"> 
    <p> 
     <span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span> 
     This item will be permanently deleted and cannot be recovered. Are you sure? 
    </p> 
</div> 

そしてこのジャバスクリプト:私がすべきのように私は、リンクをクリックしたときに

$("#dialog-confirm").dialog({ 
    autoOpen: false, 
    modal: true, 
    buttons: { 
     "Delete": function() { 
      window.location.href = $(this).attr("href"); ; 
     }, 
     "Cancel": function() { 
      $(this).dialog("close"); 
     } 
    } 
}); 

$("a.confirm").click(function() { 
    $("#dialog-confirm").dialog("open"); 
}); 

ダイアログが開きます。唯一の問題は、私が確認またはキャンセルするのを待たず、ダイアログがポップアップしてURLにリダイレクトされることです。

私はここで間違っていますか?

+1

あなたの 'delete'ハンドラに間違った' this'があります。 – SLaks

+0

@SLaks - 実際、それは正しいです:http://jqueryui.com/demos/dialog/#modal-confirmation(おそらく 'apply'でコールバックが呼び出されます) – Skilldrick

答えて

4
$("a.confirm").click(function() { 
    $("#dialog-confirm").dialog("open"); 
    return false; 
}); 

falseを返すことで、デフォルトのアクションが発生しないようにする必要があります。

+0

うわー、それは気違いです - ほとんど同じ言い回しです。私は私のものを提出するまでtを表示する)。 – Skilldrick

+0

答えを削除しますが、最近学んだことは 'return false'ではなく' e.preventDefault() 'を使う方が良いということです。なぜなら、' click'イベントがバブリングを続けてもらいたいからですデフォルトのアクションを発生させたくない場合 – Skilldrick

+0

ハワイ、うわー。ありがとう。私は実際にイベントをバブリングしたくないので、実際に 'return false;を選択しました。 –

3

アンカーのクリックイベントからfalseを返す必要があります。それ以外の場合は、ページにhref URlがロードされます。 試してみてください:

$("a.confirm").click(function() { 
    $("#dialog-confirm").dialog("open"); 
    return false; 
}); 
関連する問題