IE 7でconfirmとdisabledの問題と解決(asp.net)を行い、標準ブラウザと互換性がある

2873 ワード

この2,3日この上の工夫が多すぎて、実験しないのはaspです.Netの原因はやはりie 7自身の原因で、問題はこうです.
理由は、提出ボタン/リンクをクリックすると、大量のデータ処理があり、時間がかかります.お客様はクリックした後、このボタンを灰にすると同時に、半透明のポップアップ層を使ってアニメーションをロードする案を表示しないように要求しています.それはあまりにも"web 2.0"だったので、ははは、企业の内部アプリケーションに対して、时には原始的な手法がもっと受け入れられることがあります.
ボタン自体にclickイベントがあり、onClientClickイベントを登録し、その戻り値に基づいてデータをコミットするかどうかを判断します.
<asp:Button ID="Button1" runat=server Text="testbtn" CssClass="test" OnClick="testclick" OnClientClick="return confirm('sure?');" />

テストは顺调に合格して、しかし私がIE 7の下でテストする时、点の确认に関わらずやはり拒否することを発见して、すべて提出して、仕方がなくて、googleだけあって、めちゃくちゃな原因は私は知りたくなくて、解决は以下の通りです:
<asp:Button ID="Button1" runat=server Text="testbtn" CssClass="test" OnClick="testclick" 

OnClientClick="var r=false; if(confirm('sure?')) r=true; event.returnValue=r; return r;" />

この例は私がついでに2つの問題を解決しました.returnValue=false;IE 7の提出を阻止することができて、しかしFFは提出を阻止することができません;2それにreturn falseを加える.解決できます.
はい、これはconfirmの解決です.
 
次の例の簡単さのためにconfirmがないと仮定し,disabledの問題を直接解決した.
ボタンがクリックされると、そのボタンが無効になるイベントがトリガーされることを想定し、ボタンが再びクリックされず、データも正常にコミットされる.
私たちはすべてこのボタンでトリガーします.
<asp:Button ID="Button1" runat=server Text="testbtn" CssClass="test" OnClick="testclick" OnClientClick="dis(this);" />

もちろん、より包括的にするために、私たちは時々Aラベルでボタンスタイルをシミュレートして提出します.私は以前はそうしていましたので、この2つの効果を同時にテストします.
asp:LinkButton ID="LinkButton1" runat="server" Text="test" CssClass="stepbtn" OnClick="btnNext_click" OnClientClick="dis(this);"></asp:LinkButton>

jsは独立しており、jQueryを使用しています.
function dis(o){

	$(o).attr("disabled",true);

}

結果:
ボタン:IE 7でもFFでも、データをコミットすることはできません.無効にすると無効になります.submitクラスのフォームコントロールでは、コミット前に自分のdisabled属性をチェックします.チェック時に属性が本当であれば、データはコミットされません.
ハイパーリンク:IE 7の下できれいに灰になって、それから発見して、意外にもやはり提出することができません!フォームコントロールのような論理が表示されます.火狐の下ではもちろん灰になる効果はありませんが、一度に提出できる、つまり、この属性には何の意味もありません.
 
その上で、JSを改造します.
余談ですが、私は伝達対象をパラメータとして便利にするために、グローバル変数を設定しました.settimeout/setInterval伝達対象パラメータをどのように与えるかについては、自分でgoogleしてください.
var thisobj;

function dis(o){

	thisobj=0;

	setTimeout(function(){$(thisobj).attr("disabled",true);},300);//  ,      ,       

}

結果:
ボタン:私たちが望んでいる効果です.
ハイパーリンク:IE 7は順調に通過し、火狐は無理に通過したが、もしあなたがこのリンクにconfirm文の確認があれば、クリックするたびに弾き出すことができ、検証されたが、データは一度しか提出されていないので、もしあなたのシステムの大部分がリンクで提出されているのに、このような効果を実現するには、confirmの前にこの要素のdisabled属性が文字列'true'であるかどうかを確定するしかないので、注意してください.ブール値ではありません.もちろん、jsで「disabled」と定義すればいいです.本質的には、disabledはフォーム要素の属性であり、非フォーム要素は標準ブラウザの下で現在の問題が発生します.
 
これは完成してからまとめたもので、サンプルコードは純粋に手書きで、検証されていません.もしコピーが無効になったら、主に考えを見てみましょう.ほほほ.