Javascript 还原或保留select after.replaceWith()的事件
我正在通过javascript重建一个选择,以根据用户输入调整包含的选项元素 在初始页面加载时,我将所有选择选项存储在“countryOptions”中,并根据用户输入,将我的“countryOptions”中包含的所有选择选项与新子集进行匹配,并创建一个新的选择元素作为“newSelect”,以Javascript 还原或保留select after.replaceWith()的事件,javascript,jquery,dom,event-listener,replacewith,Javascript,Jquery,Dom,Event Listener,Replacewith,我正在通过javascript重建一个选择,以根据用户输入调整包含的选项元素 在初始页面加载时,我将所有选择选项存储在“countryOptions”中,并根据用户输入,将我的“countryOptions”中包含的所有选择选项与新子集进行匹配,并创建一个新的选择元素作为“newSelect”,以替换为(newSelect)将其写入DOM select元素有一个on-change侦听器: $(countrySelector).on('change', function(){...}); 我不使
替换为(newSelect)
将其写入DOM
select元素有一个on-change侦听器:
$(countrySelector).on('change', function(){...});
我不使用.html()
,因为在选择元素上使用.html()
时,某些IE版本中存在已知问题。将元素替换为.replaceWith()
后,所有事件处理程序都将按照.replaceWith()
的预期删除
我不使用CSS来“隐藏”选择选项元素,因为这在跨浏览器时不起作用
现在,我正在寻找一种跨浏览器工作的替代方法,或者一种保留/恢复事件处理程序的方法。有什么想法吗?最简单的方法是使用委托事件处理程序,每次替换元素时都可以绑定它。但是,如果出于任何原因您不想或不能这样做,您可以使用
$._data( countrySelector, "events" );
但是请注意,countrySelector需要是html而不是jQuery元素。它返回一个包含所有处理程序的对象,然后可以将这些处理程序绑定到新元素
代表的代码示例:
function countrySelectorChange() {
// do your magic
}
然后将委托绑定到事件:
$(countrySelector).on('change', countrySelectorChange);
对每个需要添加的项目重复此操作
newSelect.on('change', countrySelectorChange);
最简单的方法是使用委托事件处理程序,每次替换元素时都可以绑定它。但是,如果出于任何原因您不想或不能这样做,您可以使用
$._data( countrySelector, "events" );
但是请注意,countrySelector需要是html而不是jQuery元素。它返回一个包含所有处理程序的对象,然后可以将这些处理程序绑定到新元素
代表的代码示例:
function countrySelectorChange() {
// do your magic
}
然后将委托绑定到事件:
$(countrySelector).on('change', countrySelectorChange);
对每个需要添加的项目重复此操作
newSelect.on('change', countrySelectorChange);
可能有帮助
$(document).on('change', countrySelector , function(){...});
可能有帮助
$(document).on('change', countrySelector , function(){...});
委托事件处理程序呢?如果在
replaceWith()
中使用clone()
,并将true传递给它:$('element')。克隆(true)
将复制事件处理程序。什么是countrySelector
,选择器字符串?@a.WolffcountrySelector
包含所用select元素的ID,在这种情况下“#country”委托事件处理程序如何?如果在replaceWith()
中使用clone()
,并将true传递给它:$('element')。clone(true)
复制事件处理程序。什么是countrySelector
,选择器字符串?@a.WolffcountrySelector
包含所用select元素的ID,在本例中为“#country”“有时候,解决方案非常简单,没有facepalm就足够了。。。这为我修复了它,我甚至理解它。。。我应该亲眼看到的。非常感谢。有时,解决方案是如此简单,没有一个facepalm就足够了。。。这为我修复了它,我甚至理解它。。。我应该亲眼看到的。非常感谢。您的想法是使用委托事件处理程序。我接受了另一个回复,因为我首先看到了它,它有一个代码示例。尽管如此,你的答案还是不错的,因为你说出了正确的答案,甚至还提供了一个备选答案。。。很难在两个答案中做出选择。如果你想包含一个简短的代码示例,我会给你一个绿色的箭头,因为它对其他用户会非常有帮助。不是为了箭,而是为了阐明我的意思。另一个解决方案是好的,因为它是。我个人不喜欢尽可能地使用“全局”事件处理程序,但这是一个有效且简单的解决方案。我接受了另一个回复,因为我首先看到了它,它有一个代码示例。尽管如此,你的答案还是不错的,因为你说出了正确的答案,甚至还提供了一个备选答案。。。很难在两个答案中做出选择。如果你想包含一个简短的代码示例,我会给你一个绿色的箭头,因为它对其他用户会非常有帮助。不是为了箭,而是为了阐明我的意思。另一个解决方案是好的,因为它是。我个人不喜欢尽可能使用“全局”事件处理程序,但这是一个有效且简单的解决方案。