2017-05-10 3 views
0

私は、ユーザーがアカウントコードを入力できるテキストボックスを持っています。テキストボックスには、onblurというアカウントコードに対していくつかの検証を実行する関数があります。 テキストボックスには、テキストボックスをダブルクリックする機能もあります。これにより、アカウントコードに関する情報を表示する画面が開きます。テキストボックスをダブルクリックすると、オンブラフが実行されなくなりますか?

<asp:TextBox runat="server" ID="txtAccountCode" CssClass="lookup" MaxLength="8" style="text-transform:uppercase" ondblclick="OpenCust(this.value)" onblur="CheckIfAccountCodeValid(this.value)"></asp:TextBox> 

問題は毎回、それはまたonblur実行し、テキストボックスにユーザがダブルクリックです。 ondblclickを呼び出すと、onblurの実行を停止する方法はありますか?

+0

.removeAttr( 'onblur'); ' – Curiousdev

+0

この提案は間違っています。もし彼がonblur attrを取り除くと、彼は将来onblurチェックを失うでしょう。 – quirimmo

+0

@quirimmo ondbclickの実行後にonblur attrを戻す方法がありますか? – user123456789

答えて

0

OpenCust関数でonBlurイベントリスナーを削除するだけで済みます。バニラJSでこのよう

何か:

document.getElementById('txtAccountCode').removeEventListener('ondblclick', CheckIfAccountCodeValid); 
+0

この方法では、最初のonblurがトリガーされた後、彼は将来ondblclickを失い、dblクリックの前に常にトリガーされます。これは、HTMLからondblclick属性を直接削除するのと同じことです。これは彼が望むものではありません。 – quirimmo

+0

@quirimmo公正点。私は、機能が完了した後にイベントを復元することができると考えましたが、それをさらにテストすることなく、私はコメントしたくありませんでした。 –

0

問題は、ブラウザがイベントを発生する順序です。 onblurは、onmousedownの後、ただしondblclickの前にトリガーされます。 可能として最も簡単なものを維持するために、私の提案はondblclik内のすべてを管理することであるので、このような何か:あなた `OpenCust(this.value)` `$(this)を使用してonblur``削除で

<asp:TextBox runat="server" ID="txtAccountCode" CssClass="lookup" MaxLength="8" style="text-transform:uppercase" ondblclick="OpenCustIfValid(this.value)"></asp:TextBox> 

function OpenCustIfValid(value) { 
    if (CheckIfAccountCodeValid(value)) { 
     OpenCust(value); 
    } 
} 
+0

OPはぼかしイベントを取り除きたいと思っています。あなたのコードごとに、ユーザが入力をダブルクリックするたびにblurイベントを呼び出すように思われます。間違っていませんか? – Curiousdev

+0

実際に彼が達成したいのは、フィールドを検証し、有効である場合にのみ – quirimmo

関連する問題