2010-06-09 48 views
0

我在我的aspx頁面上有一個文本框,一個按鈕和一個「AdvancedSearch」鏈接。在頁面加載時,焦點被設置爲文本框。點擊「高級搜索」鏈接,將打開一個燈箱(疊加)窗口。我想將焦點設置到此Lightbox窗口中的文本框。我正在使用JavaScript來實現這一點。該代碼看起來有點像這樣:將焦點設置爲Lightbox(疊加)窗口內的文本框時出現Javascript錯誤

如果{
element.focus();(element.type = 「隱藏」 & & element.style.display = 「無」 & & element.disabled!!)
return;
}

當收藏夾窗口負載,我得到一個JavaScript錯誤 - 「不能將焦點移到控制,因爲它是無形的,未啓用,或不接受焦點的類型,」

任何想法爲什麼會引發此錯誤,以及爲什麼它無法將焦點設置到Lightbox窗口中的文本框?

謝謝, Rishab。

+0

短短的想法:元素不能被隱藏,但它的容器可能被隱藏。此外,燈箱可能只會在您的焦點嘗試後出現。在嘗試設置焦點或循環之前,可能需要等待一兩秒鐘,直到可以設置焦點爲止。這些不是最好的解決方案 – 2010-06-09 09:35:23

回答

2

As @Stephen評論說,該元素可能位於隱藏容器中。如果您有驗證腳本(您的頁面至少包含一個驗證控件),則可以使用IsInVisibleContainer函數(asp.net驗證腳本的一部分)。

如果不是你可以包括以下功能:

function IsInVisibleContainer(ctrl) { 
    if (typeof(ctrl.style) != "undefined" && 
     ((typeof(ctrl.style.display) != "undefined" && 
      ctrl.style.display == "none") || 
      (typeof(ctrl.style.visibility) != "undefined" && 
      ctrl.style.visibility == "hidden"))) { 
     return false; 
    } 
    else if (typeof(ctrl.parentNode) != "undefined" && 
      ctrl.parentNode != null && 
      ctrl.parentNode != ctrl) { 
     return IsInVisibleContainer(ctrl.parentNode); 
    } 
    return true; 
} 

然後延遲設置焦點,直到conatiner變得可見:

function setFocus(){ 
    if(element.type != "hidden" && !element.disabled) { 
     if(IsInVisibleContainer(element)) 
     element.focus(); 
     else 
     window.setTimeout(setFocus,100); 
    } 
} 
0

對我來說,問題是斯蒂芬如上所述。需要關注的代碼在lightbox(現在稱爲「shadowbox」)代碼完成之前開始執行。

所以下面有工作就像一個魅力:

function focusIt() { 
     window.setTimeout(doIt,100); 

function doIt() { 
     document.getElementById("title").focus(); 
} 
} 
onload = focusIt;