2

aspx ファイルに次のコードがあります。

<asp:GridView ID="GridView1"  runat="server" ShowFooter="true"  
AutoGenerateColumns="False" >
   <Columns>
            <asp:TemplateField>
              <ItemTemplate>
<asp:LinkButton ID="Button1" runat="server" Text="Active" OnClientClick="return 
confirmMessage(this);" />
             </ItemTemplate>
    </Columns>
</asp:GridView>

次のJquery/クライアント側コードがあります

function confirmMessage(obj)
{
if ($(obj).attr("text")=="Active")
{
return confirm("Convert from active to inactive");
}
else
{
return confirm("Convert from inactive to active");
}
}

上記のコードは Mozilla と Chrome ブラウザでは問題なく動作しますが、Internet Explorer の場合は常に 2 番目のブロックを実行しています。

return confirm("Convert from inactive to active");

助けていただければ幸いです。

4

2 に答える 2

0

「テキスト」という属性はありません。ASP.NET サーバー コントロールの「テキスト」属性は、クライアント側で「値」属性に変換されます。

次のように値を参照する必要があります。

$(obj).attr("value");

または、より単純に次のようにします。

$(obj).val();
于 2012-06-22T09:24:33.883 に答える
0

あなたの問題は、さまざまなブラウザー間の文字列比較の違いと、DOM からのテキスト生成メカニズムの違いに関連している可能性が非常に高いです。デバッガー (IE9 Developer Tools/Scripting タブなど) の下で確認しようとしましたが、$(obj).attr("text")IE の下で返されるものは何ですか?

さらに、テキストを比較するアプローチは、とにかく信頼性が高くありません (たとえば、 の を変更すると失敗しTextますLinkButton)。代わりに、クラスまたは別のリンク ボタンのいずれかに依存することをお勧めします。次に例を示します。

  1. LinkBut​​ton には次のマークアップを使用します (CssClass プロパティに注意してください)。

    <asp:LinkButton ID="Button1" runat="server" Text="Active" 
    OnClientClick="return confirmMessage(this);" CssClass="button-activate" />
    
  2. 次に、次の JavaScript を使用します。

    function confirmMessage(obj) {
         if ($(obj).is(".button-activate")) {
              return confirm("Convert from active to inactive");
         } else {
              return confirm("Convert from inactive to active");
         }
    }
    

ボタンが「アクティブ化」ではなく「非アクティブ化」になっている場合は、他のCssClass値をLinkButton.

于 2012-06-06T06:31:46.530 に答える