1. 程式人生 > >由於該控制元件目前不可見、未啟用或類…

由於該控制元件目前不可見、未啟用或類…

一·由於該控制元件目前不可見、未啟用或型別不允許,因此無法將焦點移向它

此類問題是因為在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設定隱藏,導致在初始化頁面的時候出現這種問題