ChromeデバッガーなどのデバッガーでHTMLを見ると、id="login-dialog-email"の入力要素のインスタンスが2つあることがわかります。
W3C仕様では、単一のHTMLドキュメントで使用できるid属性のインスタンスは1つだけであり、ブラウザーベンダーは、同じ値の複数のid属性がオンになっている場合、動作が未定義であると見なされる方法でこの仕様を実装します。ページ。
私の経験では、これは実際には上記のIDを持つ要素の2番目のインスタンスにのみ影響します。login-dialog-emailを検索してどの要素が強調表示されるかを調べると、2番目のインスタンスがあなたのフォーム。
最初のインスタンスを削除するか、一意の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>
...
このフィールドの2番目のインスタンスは、実際にはファンシーボックス内に表示されます。これは、ターゲットにしようとしている実際の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 = "test@example.com";
jQuery:
このサイトはjQueryを使用しているため、次の方法も使用できる可能性があります。
$('input[name="emailAddress"]').val( "test@example.com" );