複雑なフォームのセットをロードするページがあります。この一連のフォームには、パスワードフィールドがあります。これらのパスワードフィールドには表示/非表示の切り替えスイッチがあり、いずれかをクリックすると、すべてのパスワードフィールドがDOM内で同等のものに置き換えられ、表示/非表示の効果を促進するためにタイプが「テキスト」と「パスワード」の間で切り替えられます。 。明確にするために、元の入力は、IDを含む同じ属性を持つが、タイプ属性が異なるまったく新しい入力に置き換えられます。
問題は、トグルが発生すると、以前にjQueryセレクターで作成したグローバルハンドル($('#password_field_id')など)がパスワードフィールドにマップされなくなることです。
現在のDOMから元のCSSセレクターを再選択するセレクターで実行できるjQuery関数はありますか?
入力を置き換える関数は次のとおりです。
function TogglePasswordHide()
{
var show = false;
if ($('#basic_pass_24').attr('type') == 'password')
{
show = true;
}
$('input.password_input').each(function()
{
var sDisabled = '';
if ($(this).is(':disabled'))
{
sDisabled = 'disabled="disabled"';
}
if ( show ) // show the password
{
$(this).replaceWith('<input type="text" '+sDisabled+' class="password_input" id="'+$(this).attr('id')+'" value="'+$(this).val()+'">');
show_password.text('hide');
}
else // hide the password
{
$(this).replaceWith('<input type="password" '+sDisabled+' class="password_input" id="'+$(this).attr('id')+'" value="'+$(this).val()+'">');
show_password.text('show');
}
});
}
...置換が行われた後に.each中にjqueryオブジェクトを「再ロード」するための呼び出しがあります。これにより、同じ相対入力へのグローバルハンドルが、新しいjQueryオブジェクトを再宣言するのではなく、単に更新されます。各要素に同じセレクターを使用して、元のハンドルを上書きしますか?