由於該控制元件目前不可見、未啟用或類…
一·由於該控制元件目前不可見、未啟用或型別不允許,因此無法將焦點移向它
此類問題是因為在js中呼叫了*.focus()方法,而*元素卻是一個'hidden'的元素型別,或者*的祖宗節點是被diaplay=none掉的元素,如果此時再呼叫的話,瀏覽器報錯無法將焦點移向它就不足為怪了。
錯誤原始碼如下
function validateForm(){
var inputs = document.getElementsByTagName_r("input");
for(var i=0;i
var inputValue = inputs[i].value.Trim();
if(inputs[i].type!='submit'&&inputs[i].type!='reset'){
if(inputValue.length!=0){
continue;
}else{
inputs[i].focus();
inputs[i].select();
alert('【'+inputs[i].previousSibling.nodeValue+'】選項不能為空!');
return
false;
}
}
}
return true;
}
因為要對頁面的表單進行進行非空驗證,因為表單個數太多,所以採用迴圈辦法,為了方便,在校驗不通過後,將焦點聚焦在為空的元素上,在應用中有使用了其他的一個自定義的alert()控制元件,要生成一個div來顯示提示資訊,在此div中有
var sFunc = '';
var sClose = '';
這麼三個input元素,當用戶點選這三個按鈕之一後將隱藏該div,因為在校驗中沒有排除對button和image的校驗,當然他們是沒有value值的,所以要提示框關閉後要將焦點聚焦到dialogOk上自然就報錯了。
有兩種解決方案:
1.是在關閉提示框後將這三個input元素直接remove掉,那將對原來的頁面沒有任何影響,在提示是再生成它們
2.if(inputs[i].type!='submit'&&inputs[i].type!='reset')條件改為if(inputs[i].type!='submit'&&inputs[i].type!='reset'&&inputs[i].type!='button'&&inputs[i].type!='image')或者if(input[i].type='text')即可
二·型別不匹配
錯誤程式碼如下:
$('dialogOk').parentNode.removeChild('dialogOk');
$('dialogCancel').parentNode.removeChild('dialogCancel');
$('dialogBoxClose').parentNode.removeChild('dialogBoxClose');
顯然應改為下面的
$('dialogOk').parentNode.removeChild($('dialogOk'));
$('dialogCancel').parentNode.removeChild($('dialogCancel'));
$('dialogBoxClose').parentNode.removeChild($('dialogBoxClose'));
參考上面的例子:
總結是由於iframe設定隱藏,導致在初始化頁面的時候出現這種問題