用ExtJS实现了一个笨拙的Confirm对话框

为了让所开发的项目适应多浏览器,并使展现效果良好,这段时间一直在利用ExtJS提供的JS对项目进行优化调整。

在实行animate、模态窗口模拟以及Alert MessageBox等一系列调整后,对于要实行像IE里的window.confirm函数的效果遇到了一点麻烦,今天终于用笨拙的方式实现了window.confirm这样的功能。

首先,我查找ExtJS提供的MessageBox对象,发现提供了confirm函数,因此决定使用该函数来将window.confirm替换。ExtJS提供的confirm函数是通过show出一个MessageBox对象,该函数返回的是对象,而不是window.confirm的true/false值;

其次,MessageBox的按钮事件是通过function参数来实现,按钮的操作结果不会再返回到confirm函数对象中去。

由于上面这两点,我在实现一个GridView对象的Delete删除确认时,费了一些功夫。

以前在用window.confirm来进行确认时,我只在GridView的Delete ButtonField的OnClientClick事件,设置了if (!DeleteConfirm(this)){return false;}这样的字符内容,这样客户端在confirm对话框选择Ok的时候会进入服务端事件进行数据删除操作。

修改前的DeleteConfirm函数为

function DeleteConfirm(item){

    if (confirm(message) == false)

        return false;

    else

        return true;

}

使用ExtJS的MessageBox后,我将DeleteConfirm函数首先修改为

function DeleteConfirm(item){

Ext.MessageBox.confirm(confirmtitle, message, function(btn){

if (btn == 'yes'){

return true;

}

    else{

    return false;

}

});    

}

结果对话框出现一下就自动消失了L

上网查看了一些ExtJS关于confirm MessageBox的内容,很多网友提供的都是全部用ExtJS实现的,通过Grid来进行删除确认的都是用的ExtJS的GridPanel,没有找到和我目前这种情况有关的内容。只好自己来想解决办法了。

既然ExtJS的confirm是在function(btn)里实现按钮控制的,我想可以将GridView的Delete ButtonField的OnClientClick事件修改为DeleteConfirm(this);return false;直接返回暂不执行服务器端事件。现在MessageBox显示出来了,没有闪一下就消失。点击MessageBox的按钮后没有任何反应,看来还得再执行一下Delete ButtonField的OnClientClick事件,执行服务器端的操作。

我想是不是可以将Delete ButtonField对象的onclick修改后再在JS中执行一下click()事件。如是我将上面的函数修改为

function DeleteConfirm(item){

Ext.MessageBox.confirm(confirmtitle, message, function(btn){

if (btn == 'yes'){

var attclick = item.getAttribute('onclick');

    attclick = attclick.replace("DeleteConfirm(this);return false;","");

        item.setAttribute('onclick',attclick);

    item.click();

});    

}

上面的修改在Firefox中测试通过,可在IE7里却不能通过,这下有点晕了L

经过反复的跟踪测试和修改,最后我将GridView的Delete ButtonField的OnClientClick事件修改为DeleteConfirm(this,'"+e.row.rowIndex+"');return false;将上面的函数修改为

//Delete confirm dialog function

function DeleteConfirm(item,index){

Ext.MessageBox.confirm(confirmtitle, message, function(btn){

if (btn == 'yes')

{

__doPostBack('ctl00$ContentPlaceHolder1$GridView1','Delete$'+index);

}

});

}

在IE和Firefox上测试都可以通过。confirm使用ExtJS的MessageBox是实现了,看着上面的函数,将__doPostBack的eventTarget和eventArgument都写死了,真是个笨死的方法啊。

上面是我对ExtJS的confirm函数的应用,查看ExtJS的实例以及网上资料,我也知道可以通过其他的途径来达到和服务器端交互的目的,目前就暂时先这样笨一下了。期待大家的更好方式共享。J

posted on 2008-03-31 16:54  Beasy  阅读(3911)  评论(0编辑  收藏  举报