2012-05-26 34 views
1

請訪問這個頁面實時快速打擊登錄右上方:getElementByID不工作,因爲字段在某種框架中,我如何訪問它?

這裏的鏈接:http://forums.gamesalad.com

我想預填彈出,這兩個領域。他們似乎處於某種框架。我無法使用getElementByID(或任何getElement)訪問這些字段。我如何使用JavaScript訪問這兩個字段?

注意:(不要擔心發射的JavaScript,只是獲得訪問字段)。

這裏是我當前的代碼:

document.getElementById('login-dialog-email').value = 'the user name'; 
+0

你指的是哪一頁? – jmort253

+0

對不起,幾乎忘了添加它。 – ManOx

+0

再次,您需要添加的下一件事是您試圖用來訪問這些字段的代碼。這給了我們一個開始的地方,也讓你看起來像你自己嘗試過/完成了研究。祝你好運! – jmort253

回答

1

如果你看一下在調試你的HTML,如Chrome瀏覽器調試器,你會發現你有ID =「登錄,對話框的電子郵件」的輸入元素的兩個實例。

W3C規範指出,在一個HTML文檔中只能使用一個id屬性的實例,而瀏覽器供應商以這樣的方式實現此規範,即如果行爲被認爲是未定義的,則多個id屬性頁面上的值相同。

根據我的經驗,這實際上隻影響帶有所述id的元素的第二個實例,如果您搜索login-dialog-email並檢查哪個元素被突出顯示,您會看到第二個實例是代表你的形式的那個。

刪除第一個實例,或使用唯一的ID,然後您將能夠定位元素。

此登錄場的第一個實例似乎是隱藏在頁面上的模板的一部分。

<div id="login-form-template" style="display: none"> 
    <form accept-charset="UTF-8" action="https://auth.gamesalad.com/auth/signIn" class="dialog dialog-form" id="common-login-form" method="post"> 
    ... 

    <li class="email"> 
     <label for="login-dialog-email"> 
     Email: 
      <input id="login-dialog-email" name="emailAddress" type="text" value=""></input> 
     </label> 
    </li> 
    <li class="password"> 
     <label for="login-dialog-password"> 
     Password: 
      <input id="login-dialog-password" name="password" type="password" value=""> 
     </label> 
    ... 

本場的第二個實例實際上出現的fancybox,這哪裏是實際的HTML位於您努力的目標內。

<div id="fancybox-content" style="border-top-width: 10px; border-right-width: 10px; border-bottom-width: 10px; border-left-width: 10px; width: 300px; height: 233px; "><div style="width:300px;height:auto;overflow: auto;position:relative;"> 
    <form accept-charset="UTF-8" action="https://auth.gamesalad.com/auth/signIn" class="dialog dialog-form" id="common-login-form" method="post"> 
    ... 
    <li class="email"> 
     <label for="login-dialog-email"> 
     Email: 
     <input id="login-dialog-email" name="emailAddress" type="text" value=""> 
     </label> 
    </li> 
    <li class="password"> 
    <label for="login-dialog-password"> 
     Password: 
     <input id="login-dialog-password" name="password" type="password" value=""> 
    </label> 
    <span> 
... 

因此,即使網站所有者試圖從目標頁面這些領域,他/她將有同樣的問題。

解決這個問題是使用任何模板內的className屬性。這確保所有的字段都可以通過DOM方法進行定位。

但是,這並不意味着你不能仍然瞄準的元素:

的JavaScript:

document.getElementsByClassName("email")[2]. 
    getElementsByTagName("input")[0].value = "[email protected]"; 

的jQuery:

該網站使用jQuery,所以你也可以使用這個:

$('input[name="emailAddress"]').val("[email protected]"); 
+0

我沒有這個網站,並且無法訪問託管這些文件的服務器。有沒有辦法做到這一點,而無需編輯ID的? – ManOx

+0

是的。我會用一個例子編輯我的答案:) – jmort253

+0

對不起再次打擾,但我怎樣才能使用該類來指定我想訪問哪個字段? – ManOx

1

你有密碼和電子郵件輸入框中輸入相同的id login-dialog-email。當您嘗試分配值時,javascript會感到困惑。分配不同的ID,你很好去。

相關問題