0

関数を作成しましたが、動的に作成された ImageButton がクリックされるたびに呼び出されます。しかし、precenDefault() は機能していません。機能は、デフォルトの防止を除いて機能しています。

jQuery

<script type="text/javascript">
    function EmpDelete(event, id) {
        event.preventDefault();
        $("#bName").text(id);        
        $('#dialog').dialog({            
            title: "Delete Employee?",
            modal: true,
            width: 500,
            height: 250,
            buttons: {
                "Cancel": function () {
                    $(this).dialog("close");
                    return false;
                },
                "Continue": function () {
                    $(this).dialog("close");
                    return true;
                }
            }
        });        
    };    
</script>

ASPX.CS

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
        e.Row.Cells[iDelete].Controls.Add
            (new ImageButton
            {
                ImageUrl = "Images/database_delete.png",
                CommandArgument = e.Row.RowIndex.ToString(),
                CommandName = "Delete",
                ID = "imgDelete",
                CssClass = "imgDelete",
                OnClientClick = "return EmpDelete(" + e.Row.Cells[iFNmae].Text + ");"
            });
    }
}
4

3 に答える 3

0

preventDefault最初のエラーは、その関数からそのように呼び出すことができないことです。呼び出しを設定した方法では、呼び出しの最後に false を返すことをお勧めします。これにより、クリックするとダイアログが開き、続行されなくなります。

ダイアログが開いて戻るだけなので、ボタンが戻るのを待たずに、関数が既に ImageButton に戻った後にボタンOKと実行されます。Cancel

<script type="text/javascript">
    function EmpDelete(event, id) 
    {
        // this is not correct because you do not have the event for preventDefault
        // event.preventDefault();
        $("#bName").text(id);        
        $('#dialog').dialog({            
            title: "Delete Employee?",
            modal: true,
            width: 500,
            height: 250,
            // that buttons here will not work as you belive !
            // they are not return and let the post back occurs after the event.
            buttons: {
                "Cancel": function () {
                    $(this).dialog("close");
                    return false;
                },
                "Continue": function () {
                    $(this).dialog("close");
                    return true;
                }
            }
        });        
      // you need to return here false.
      return false;
    };    
</script>

ここでの解決策は、ポスト バック クリックを保存し、ダイアログを閉じるときに使用することです。

それはさらに良く、本当に簡単ですconfirm

OnClientClick = "return confirm('are you sure to delete this employee ?')'

さらに良い方法は、コントロールのクラスを使用してその確認を引き付け、コードビハインドに追加しないことです。

于 2013-05-16T10:15:58.833 に答える
0

__doPostBack(uniqueID, '');jQueryの「続行」ボタンを使用して解決しました

追加した Page_Load() イベントで

 if (!Page.IsPostBack)
    {
        ClientScript.GetPostBackEventReference(gvEmployee, string.Empty);
    }

そして、Gridview_RowDataBound イベントで jQuery ダイアログを呼び出しました

e.Row.Cells[iDelete].Controls.Add
            (new ImageButton
            {
                ImageUrl = "Images/database_delete.png",
                CommandArgument = e.Row.RowIndex.ToString(),
                CommandName = "Delete",
                ID = "imgEmpDelete" + e.Row.Cells[iID].Text,
                **OnClientClick = "javascript:return rowAction(this.name)",**
                ClientIDMode = System.Web.UI.ClientIDMode.Static
            });

それが誰にも役立つことを願っています。

于 2013-05-17T23:40:59.480 に答える
0

イベントを関数に渡す必要があります。この関数は 2 つのパラメーターを想定していますが、渡されるパラメーターは 1 つだけです。

 OnClientClick = "return EmpDelete(e," + e.Row.Cells[iFNmae].Text + ");"

完全なソース

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
        e.Row.Cells[iDelete].Controls.Add
            (new ImageButton
            {
                ImageUrl = "Images/database_delete.png",
                CommandArgument = e.Row.RowIndex.ToString(),
                CommandName = "Delete",
                ID = "imgDelete",
                CssClass = "imgDelete",
                OnClientClick = "return EmpDelete(e" + e.Row.Cells[iFNmae].Text + ");"
            });
    }
}
于 2013-05-16T09:56:59.713 に答える