2017-05-10 5 views
0

사용자가 계정 코드를 입력 할 수있는 텍스트 상자가 있습니다. 이 텍스트 상자에는 onblur 함수가있어 계정 코드에서 일부 유효성 검사를 실행할 수 있습니다. 텍스트 상자에는 사용자가 텍스트 상자를 두 번 클릭하는 기능도 있습니다. 그러면 계정 코드에 대한 정보를 보여주는 화면이 열립니다.텍스트 상자를 두 번 클릭하면 onblur running이 중단됩니까?

<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

''$를 사용하여 onblur''(이)를 제거 : 일을 유지하기 위해 나의 제안은 가능한 한 가장 쉽다 ondblclik 내에서 모든 것을 관리하는 것입니다, 그래서 이런 일이 .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

문제는 브라우저가 이벤트를 발생 순서입니다. onbluronmousedown 이후, 그러나 ondblclick 전에 트리거됩니다.

당신의`OpenCust (this.value)에서
<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는 블러 이벤트를 제거하려고하고 사용자가 입력 할 때마다 블러 이벤트를 호출하는 것처럼 보이지만 잘못된 코드는 아닙니다. – Curiousdev

+0

실제로 달성하고자하는 것은 필드 유효성을 검사하고 유효한 경우에만 사용자 패널을 여는 것입니다. – quirimmo