2012-04-25 2 views
-1

버튼의 Click 이벤트에서 버튼을 비활성화하고 해당 이벤트 핸들러를 호출 할 수 있습니까?버튼 클릭 : 버튼 처리기 비활성화 및 실행

나는 이것을 시도 :

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Button1.Enabled = false; 
} 

이것은 IE, 모질라, 또는 크롬에서 작동하지 않습니다.

+1

는 클라이언트 측에서 그것을 할하시기 바랍니다 ** 만 **. – gdoron

+0

정확히 무엇을하고 싶은지에 대한 질문을 편집하십시오. 여기에 게시 한 코드는 코드가 반환 될 때 버튼을 비활성화하고 해당 메소드에서 실행중인 다른 코드도 비활성화합니다. –

+0

자바 스크립트를 통해이 작업을 수행하십시오. 서버가 아니라 작업을 수행하는 클라이언트를 기반으로 훨씬 간단합니다 (1000/10000/100000 사용자가 동일한 작업을 수행 한 경우 어떻게됩니까?) –

답변

-1
<asp:Button ... OnClientClick="disableButton(this);" /> 

<script type="text/javascript"> 
function disableButton(button) 
{ 
//need to delay a few ms so that the button posts back before being disabled 
    var buttonToDisable = button; 
    setTimeout("reallyDisableButton()"), 2); 
} 

function reallyDisableButton() 
{ 
    buttonToDisable.disabled = true; 
} 
</script> 

나는 당신의 문제 (페이지가로드하는 동안을 가지고 있기 때문에) 사람들이 여러 번 이벤트를 발로 따라서, 버튼을 여러 번 클릭되는 것으로 가정하고 당신은 단지 그들이 할 수 있도록하려면 한 번. 이렇게하면 실수로 여러 개의 동시 포스트 백이 보내지지 않도록 포스트 백 후에 버튼이 비활성화됩니다.

+0

... 지연, 당신은 버튼을 먼저 비활성화 한 다음 원래 게시를 막기 위해'e.preventDefault();'가 뒤 따르는'__doPostBack ('Button1', '');을 호출 할 수 있습니다. –

+0

@Scott 사용자가 지연을 볼 수있는 것과는 다릅니다. 그것은 그들에게 즉시 나타난다. – Servy

+0

그 점을 이해합니다. 간단히 말해서 나는 사물이 언제 발사되는지에 대한 통제를 좋아한다. 포스트 백을 발생시키는 기본 메커니즘에 대해 함수가 완료 될 수 있도록 지연되도록 두는 것은 가장 제어 된 솔루션이 아닙니다. 내가 직접 말했기 때문에 포스트 백을 실행하고 기본 기능을 사용하지 않도록 제어하는 ​​것이 나을 것입니다. 다시 말하지만, 그것은 단지 제어 환경 설정 일뿐입니다. –

0

이 추가 시도 할 수 :

protected void Button1_Click(object sender, EventArgs e) 
{ 
    // Do some stuff here 

    Button1.Attributes.Add("onclick", "javascript:return false;"); 
    Button1.Enabled = false; 
}