【PB.NET编程系列6】利用JavaScript进行客户端编程

普通WEB程序是由浏览器发出请求,服务器以HTML形式返回结果。一般情况下我们在PB的事件里编写的任何对客户端事件的响应代码都会产生一次与服务器的交互过程:当一个客户端事件被触发时,JavaScript中有一个对应的事件去向服务器发起请求,服务器端会调用对应事件的代码并将结果返回给客户端,对于客户来说一个直接的感观就是屏幕被刷新了一次。为了减少这样的postback,我们可以利用JavaScript对客户端进行编程以提高WEB程序的性能和用户体验。

要对客户端事件进行编程,必需将我们的代码包含在一个条件编译的代码块里面,编译器会识别并与普通power script代码区分开来。在自定义的JavaScript事件里可以通过使用调用Document.Form.Submit或PB缺省的已定义事件来接管被触发的事件。

下面的例子通过一个自定义的客户端JavaScript事件代码来取代DATAWINDOW的ItemChanged事件,这段代码的意思是如果是第一列或第二列的值被改变,那么调用缺省的JavaScript事件PBDataWindow_ItemChangedReject来取消值的改变。在这个例子里缺省事件将不会产生postback,如果不是第一和第二列将不会触发客户端代码。

 //Start MyScriptFile.js
 function MyItemChanged(sender, rowNumber, columnName, newValue)
 {
   if(columnName == "column1" || columnName == "column2")
   {
     // The default function is invoked
     return PBDataWindow_ItemChangedReject(sender,         rowNumber, columnName, newValue)
   }
   else
   {
    //do nothing
   }
 }
 //End MyScriptFile.js

接管的JavaScript事件写在一个条件编译代码块里:

 #IF DEFINED PBWEBFORM THEN
  dw_1.JavaScriptFile = "MyScriptFile.js"
  dw_1.OnClientItemChanged = "MyItemChanged"
 #END IF

缺省的JavaScript事件

当我们发布程序时文件PBDataWindow.js 会拷贝到服务器applicationName\Scripts目录下,在这个文件里定义了一些缺省事件供我们调用。调用这些缺省的事件将会导致一次postback或延时的postbak,也有些事件不产生postback,面的列表列出了这些事件和差别。在前面的例子中我们使用类似dw_1.OnClient事件名 = "自定义JS函数"这样的代码接管了对应的DW对应事件的代码,写在DW对应事件里的代码将不会再被调用,如果我们想重新触发这些代码,就必需使用下表的JavaScript事件了,调用这些事件时必需使用和DATAWINDOW的客户端事件相同的参数。

 

Client-side EventDefault JavaScript handler (postback action)Used under the following conditions for server-side events:
ClickedPBDataWindow_Clicked (postback)Clicked is handled, but DoubleClicked is not
Clicked and ButtonClicked are handled, but DoubleClicked is not   
Clicked and ButtonClicking is handled, but DoubleClicked is not   
PBDataWindow_DelayedClicked (delayed postback)Clicked and DoubleClicked are handled  
Clicked, DoubleClicked, and ButtonClicked are handled   
Clicked, DoubleClicked, and ButtonClicking are handled   
PBDataWindow_ClickedDifferentRow (postback)RowFocusChanging is handled, but Clicked and DoubleClicked are not  
RowFocusChanged is handled, but Clicked and DoubleClicked are not   
PBDataWindow_DelayedClickedDifferentRow (delayed postback)RowFocusChanging and DoubleClicked are handled, but Clicked is not 
RowFocusChanged and DoubleClicked are handled, but Clicked is not   
DoubleClicked PBDataWindow_DoubleClicked (postback)DoubleClicked is handled
RButtonDownPBDataWindow_RButtonDown (postback)RButtonDown is handled
ButtonClickedPBDataWindow_ButtonClicked (postback)ButtonClicked is handled and/or ButtonClicking is handled
ButtonClickingPBDataWindow_ButtonClicking (postback)ButtonClicked is handled and/or ButtonClicking is handled
ItemFocusChangedPBDataWindow_ItemFocusChanged (postback)ItemFocusChanged is handled
PBDataWindow_ItemFocusChanged_AND_ItemChanged_OR_ItemError (postback)ItemChanged and ItemError are handled, but ItemFocusChanged is not 
PBDataWindow_ItemFocusChanged_AND_ItemChanged (postback)ItemChanged is handled, but ItemFocusChanged and ItemError are not 
PBDataWindow_ItemFocusChanged_AND_ItemError (postback)ItemError is handled, but ItemChanged and ItemFocusChanged are not 
ItemErrorPBDataWindow_ItemError (no postback)ItemChanged is handled and/or ItemError is handled
ItemChangedPBDataWindow_ItemChangedReject (no postback)ItemChanged is handled
RowFocusChanged

 

PBDataWindow_RowFocusChanged (postback)RowFocusChanging is handled, but ItemFocusChanged is not
  

下表列出了Web DataWindow在客户端支持的事件列表,要使用这些事件需要在前面加前缀"OnClient"

EventArgumentsReturn Codes
ButtonClickedsender, rowNumber, buttonName0 – Continue processing
ButtonClickingsender, rowNumber, buttonName0 – Execute action assigned to button, then trigger ButtonClicked

1 – Do not execute action or trigger ButtonClicked

Clickedsender, rowNumber, objectName0 – Continue processing1 – Prevent focus change
DoubleClickedsender, rowNumber, objectName0 – Continue processing1 – Prevent focus change
ItemChangedsender, rowNumber, columnName, newValue0 – Accept data value

1 – Reject data value and prevent focus change

2 – Reject data value but allow focus change

ItemErrorsender, rowNumber, columnName, newValue0 – Reject data value and show error message

1 – Reject data value with no error message

2 – Accept data value

3 – Reject data value but allow focus change

ItemFocusChangedsender, rowNumber, columnName0 – Continue processing
RButtonDownsender, rowNumber, objectName0 – Continue processing1 – Prevent focus change
RowFocusChangedsender, newRowNumber0 – Continue processing
RowFocusChangingsender, currentRowNumber, newRowNumber0 – Continue processing

1 – Prevent focus change

转载于:https://www.cnblogs.com/newskysoft/archive/2009/08/03/1537209.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值