0

ページに隠しフィールドがあります

<input runat="server" type="hidden" id="selectedIndex" />

そして、この一連のコード、グリッドビューの行への onclick イベントによって設定されています。

var gridViewCtlId = '<%=GridView.ClientID%>';
var selectedIndex = '#<%=selectedIndex.ClientID%>';
var itemVisible = '<%=ItemVisible.ClientID%>';
var gridViewCtl = null;
var curSelRow = null;
var previousRowIndx = null;

window.onload = function showQuery()
{
    if ($(selectedIndex).val() != undefined)
    {
        if ($(selectedIndex).val() != '')
        {
            var prevRowID = $(selectedIndex).val();
            var prevRow = getSelectedRow(prevRowID);
            prevRow.style.backgroundColor = '#1A8CD4';
        }
    }       
}

 function getGridViewControl(rowIdx)
{
    if (gridViewCtl == null)
    {
        gridViewCtl = document.getElementById(gridViewCtlId);
    }
}

function onGridViewRowSelected(rowIdx)
{   
    if (document.getElementById(gridViewCtlId).disabled == false)
    {
        var selRowCCA = getSelectedRow(rowIdx);
        if (curSelRow != null)
        {   
            var previousRow = getSelectedRow(previousRowIndx);

            var CountIdx = previousRowIndx % 2;
            if (document.getElementById(itemVisible) == null)
            {
                if (CountIdx == 0)
                {
                    previousRow.style.backgroundColor = 'Silver';
                }
                else
                {
                    previousRow.style.backgroundColor = 'White';
                }
            }
        }

        if (null != selRow)
        {
            previousRowIndx = rowIdx;
            curSelRow = selRow;
            selRow.style.backgroundColor = '#1A8CD4';
        }
    }
}
function getSelectedRow(rowIdx)
{
    getGridViewControl(rowIdx);
    if (gridViewCtl != null)
    {
        $(selectedIndex).val(rowIdx);
        return gridViewCtl.rows[rowIdx];
    }
    return null;
}

これが起こることです: ページが最初に読み込まれるとき、非表示フィールドは定義されていません。行をクリックしてから「選択」ボタンをクリックすると、次のように呼び出されます。

GridView.Attributes.Add("disabled", "true");

グリッドビューが (選択ボタンと共に) 無効になり、別のグリッドビューが表示されます (最初のグリッドビューで何が選択されているかによって発生するはずです)。では、ここで問題です。グリッドビューの行をクリックすると (最初のグリッドビューについてのみ話しています。ここでは問題ではありません)、[選択] をクリックすると、すべてがグレー表示になり、ほとんどの場合、選択した行は、ページが読み込まれると強調表示されます (それ以外の場合は、何らかの理由でデフォルトで行 #2 になります)。次に、行 4 をクリックしてから行 1 をクリックしてから選択をクリックすると、何らかの理由で行 4 が強調表示されたままになり、行 1 をクリックしなかったように、行 4 のデータが 2 番目のグリッドビューに入力されます。しかし、行 4 をクリックすると次に行1をクリックしてから行1をもう一度クリックすると、保存されますか。なぜそれが起こるのか誰か知っていますか?

また、選択がヒットしたときに最初のグリッドビューを無効にしようとしているので、そうします

GridView.Attributes.Add("disabled", "true");

GridView.Enabled = false; ではなく。

ユーザーが検索ボタン (このグリッドビューを表示するためにページに以前配置されていた別のボタン) を再度クリックすると、セカンダリ グリッドビューが非表示になり、プライマリ グリッドビュー (問題のこの 1 つ) が再度有効になります。 . しかし、やっている

GridView.Attributes.Add("disabled", "false");

検索ボタンが起動されると、グリッドビューのみが無効になりますが、これは非常に奇妙です。無効化されたフィールドは IE 以外の他のブラウザーではサポートされていないことがわかりました。グリッドビューが無効になっているかどうかを確認する必要があるため、ユーザーが選択した後に別の行をクリックできないようにする必要があるため (これが発生します)私が次のことをしないと:

if (document.getElementById(gridViewCtlId).disabled == false)

それで、誰かがそのタスクを達成する別の方法を教えてもらえますか? よろしくお願いします。

4

1 に答える 1

1

無効に関するいくつかの情報:

  • ブラウザは、無効になっているコントロールの値をサーバーに送信しません。これは定義によるものです。
  • 無効フィールドは他のブラウザでサポートされていますが、別のモデルを使用しています。サポートされているブラウザのリストに注意してください:http ://www.w3schools.com/tags/att_input_disabled.asp (また、disabled ='disabled'の定義方法)。

また、読み取り専用との比較もご覧ください:http ://www.w3.org/TR/html401/interact/forms.html#h-17.12.2

また、標準によれば、そのサポートは特定の要素に限定されていることに注意してください。サポートされていないhtml要素に適用しているため、これは重要です。これは、シナリオ内の他のブラウザーで機能しない原因でもある可能性があります。スクリプトを使用して、サポートされているコントロールを無効にし、$ get( "someClientID")。getElementsByTagName( "input");のようにコントロールを適用することができます。

于 2009-03-31T16:19:45.070 に答える