在DOM可能已更改后,是否可以“刷新”或“重新运行”jQuery选择器?

在DOM可能已更改后,是否可以“刷新”或“重新运行”jQuery选择器?,第1张

概述我有一个页面加载一组复杂的表单.在这组表单中,有密码字段.这些密码字段具有显示/隐藏切换开关,当点击其中任何一个时,所有密码字段都被替换为DOM中的等价物,其类型在“文本”和“密码”之间切换以便于显示/隐藏效果.为了清楚起见,原始输入是replaceW()一个具有相同属性的全新输入,包括ID,但具有不同的类型属性. 问题是当切换发生时,我之前在jQuery选择器中创建的全局句柄(例如$(‘#pas 我有一个页面加载一组复杂的表单.在这组表单中,有密码字段.这些密码字段具有显示/隐藏切换开关,当点击其中任何一个时,所有密码字段都被替换为DOM中的等价物,其类型在“文本”和“密码”之间切换以便于显示/隐藏效果.为了清楚起见,原始输入是replaceW()一个具有相同属性的全新输入,包括ID,但具有不同的类型属性.

问题是当切换发生时,我之前在jquery选择器中创建的全局句柄(例如$(‘#password_fIEld_ID’))不再映射到密码字段.

是否有一个jquery函数可以在选择器上运行,它将从当前DOM中重新选择其原始的css选择器?

替换输入的函数如下:

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+'  ID="'+$(this).attr('ID')+'" value="'+$(this).val()+'">');            show_password.text('hIDe');        }        else // hIDe the password        {            $(this).replaceWith('<input type="password" '+sDisabled+'  ID="'+$(this).attr('ID')+'" value="'+$(this).val()+'">');            show_password.text('show');        }    });}

…在替换完成后,我可以在.each中重新加载jquery对象,这样我对这些相同输入的全局句柄只会更新自己而不必重新声明新的jquery对象每个元素的相同选择器并覆盖原始句柄?

解决方法 使用事件委派,并监听父窗体上的事件:

$("form").on("click",".password_input",function(event) {    /* What to do when password input is clicked */});

因为此事件绑定到表单元素,所以您可以根据需要添加和删除输入,而不必担心丢失事件.

当您在其中一个密码输入上单击或执行其他 *** 作时,此事件会冒泡到随后进行评估的形式.如果.target与您的选择器匹配(在此示例中为.password_input),则将调用回调函数,您可以对发生的事件做出反应.

总结

以上是内存溢出为你收集整理的在DOM可能已更改后,是否可以“刷新”或“重新运行”jQuery选择器?全部内容,希望文章能够帮你解决在DOM可能已更改后,是否可以“刷新”或“重新运行”jQuery选择器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1063142.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存