1. 程式人生 > >JavaScript | 阻止預設事件 點選按鈕後input框不失去焦點

JavaScript | 阻止預設事件 點選按鈕後input框不失去焦點

想實現一個登入介面常用的效果:點選按鈕後切換input框的顯示/隱藏密碼

首先想到的是,在按鈕的點選事件裡呼叫focus()使input獲得焦點,程式碼如下:

<body>
	<input id="psw" type="password">
	<button id="btn">顯示/隱藏</button>
</body>
<script>
	var isExposed=false;
	var btn=document.getElementById('btn');
	var psw=document.getElementById('psw');
	btn.onclick=function(){
		psw.focus();
		if (isExposed) {
			//切換為隱藏
			psw.type='password';
			isExposed=false;
		}else{
			//切換為顯示
			psw.type='text';
			isExposed=true;
		}
	}
</script>

可這樣做的效果是input失去焦點後又馬上獲得,效果不理想。

於是使用第二種方法,在按鈕的onmousedown事件中阻止預設事件,程式碼如下:

<body>
	<input id="psw" type="password">
	<button id="btn">顯示/隱藏</button>
</body>
<script>
	var isExposed=false;
	var btn=document.getElementById('btn');
	var psw=document.getElementById('psw');
	btn.onclick=function(){
		if (isExposed) {
			//切換為隱藏
			psw.type='password';
			isExposed=false;
		}else{
			//切換為顯示
			psw.type='text';
			isExposed=true;
		}
	}
	btn.onmousedown=function(e){
	        //現代瀏覽器阻止預設事件
	        if ( e && e.preventDefault ) 
	            e.preventDefault(); 
	        //IE阻止預設事件
	        else 
	            window.event.returnValue = false; 
	        return false; 
	}
</script>

ok 成功實現效果~ :D