ロックされたボタン型セルにフォーカスが当たるとスクリプトエラーが発生する
対象製品
SPREAD for ASP.NET 8.0J
発生環境
Internet Explorer 8
状況
修正済み
詳細
SetLockedメソッドによってロックしたボタン型セルにフォーカスが当たるとスクリプトエラーが発生します。
【再現手順】
1.新規WebフォームにSPREADひとつ、Button1,Button2を配置する
2.Webフォームに下記の再現コードを貼り付け、Web フォームを起動する
3."lock"ボタンを押下する
4."focus"ボタンを押下する
--- スクリプトエラーが発生する
※なお、手順3のあとボタンを直接押下しても現象が発生します。(二回押下する必要があります。)
【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then Return
Dim iButton As New FarPoint.Web.Spread.ButtonCellType()
FpSpread1.ActiveSheetView.Cells(0, 0).CellType = iButton
End Sub
End Class
------------------------------------
クライアント側スクリプト
------------------------------------
<script type="text/javascript">
function lock() {
var spread = document.getElementById('<%=FpSpread1.ClientID %>');
spread.Cells(0, 0).SetLocked(true);
}
function focusTest() {
var spread = document.getElementById('<%=FpSpread1.ClientID %>');
spread.focus();
}
</script>
------------------------------------
.aspx ボタン設定
------------------------------------
※下記のようにButtonへ関数実行を設定してください
<input id="Button1" type="button" value="Lock" onclick="lock();" />
<input id="Button2" type="button" value="focus" onclick="focusTest();" />
【再現手順】
1.新規WebフォームにSPREADひとつ、Button1,Button2を配置する
2.Webフォームに下記の再現コードを貼り付け、Web フォームを起動する
3."lock"ボタンを押下する
4."focus"ボタンを押下する
--- スクリプトエラーが発生する
※なお、手順3のあとボタンを直接押下しても現象が発生します。(二回押下する必要があります。)
【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then Return
Dim iButton As New FarPoint.Web.Spread.ButtonCellType()
FpSpread1.ActiveSheetView.Cells(0, 0).CellType = iButton
End Sub
End Class
------------------------------------
クライアント側スクリプト
------------------------------------
<script type="text/javascript">
function lock() {
var spread = document.getElementById('<%=FpSpread1.ClientID %>');
spread.Cells(0, 0).SetLocked(true);
}
function focusTest() {
var spread = document.getElementById('<%=FpSpread1.ClientID %>');
spread.focus();
}
</script>
------------------------------------
.aspx ボタン設定
------------------------------------
※下記のようにButtonへ関数実行を設定してください
<input id="Button1" type="button" value="Lock" onclick="lock();" />
<input id="Button2" type="button" value="focus" onclick="focusTest();" />
回避方法
Service Pack 2(v8.0.4002.2010)で修正済み。
Service Pack 2(v8.0.4002.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
製品が実行するSetFocus処理をオーバーライドし例外を補足することで本現象の回避が可能です。
【回避コード】クライアント側スクリプトに下記のコードを追加します。
window.onload = function () {
// 既存のSetFocusメソッドをオーバーライドし例外を補足
var FPWS = (((FarPoint || {}).Web || {}).Spread || {});
if (FPWS.ButtonEditor && FPWS.ButtonEditor.prototype.SetFocus) {
var originalFocus = FPWS.ButtonEditor.prototype.SetFocus;
FPWS.ButtonEditor.prototype.SetFocus = function () {
try {
originalFocus();
} catch (e) { }
};
}
};
Service Pack 2(v8.0.4002.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
製品が実行するSetFocus処理をオーバーライドし例外を補足することで本現象の回避が可能です。
【回避コード】クライアント側スクリプトに下記のコードを追加します。
window.onload = function () {
// 既存のSetFocusメソッドをオーバーライドし例外を補足
var FPWS = (((FarPoint || {}).Web || {}).Spread || {});
if (FPWS.ButtonEditor && FPWS.ButtonEditor.prototype.SetFocus) {
var originalFocus = FPWS.ButtonEditor.prototype.SetFocus;
FPWS.ButtonEditor.prototype.SetFocus = function () {
try {
originalFocus();
} catch (e) { }
};
}
};