Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 还原或保留select after.replaceWith()的事件_Javascript_Jquery_Dom_Event Listener_Replacewith - Fatal编程技术网

Javascript 还原或保留select after.replaceWith()的事件

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(){...}); 我不使

我正在通过javascript重建一个选择,以根据用户输入调整包含的选项元素

在初始页面加载时,我将所有选择选项存储在“countryOptions”中,并根据用户输入,将我的“countryOptions”中包含的所有选择选项与新子集进行匹配,并创建一个新的选择元素作为“newSelect”,以
替换为(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.Wolff
countrySelector
包含所用select元素的ID,在这种情况下“#country”委托事件处理程序如何?如果在
replaceWith()
中使用
clone()
,并将true传递给它:
$('element')。clone(true)
复制事件处理程序。什么是
countrySelector
,选择器字符串?@a.Wolff
countrySelector
包含所用select元素的ID,在本例中为“#country”“有时候,解决方案非常简单,没有facepalm就足够了。。。这为我修复了它,我甚至理解它。。。我应该亲眼看到的。非常感谢。有时,解决方案是如此简单,没有一个facepalm就足够了。。。这为我修复了它,我甚至理解它。。。我应该亲眼看到的。非常感谢。您的想法是使用委托事件处理程序。我接受了另一个回复,因为我首先看到了它,它有一个代码示例。尽管如此,你的答案还是不错的,因为你说出了正确的答案,甚至还提供了一个备选答案。。。很难在两个答案中做出选择。如果你想包含一个简短的代码示例,我会给你一个绿色的箭头,因为它对其他用户会非常有帮助。不是为了箭,而是为了阐明我的意思。另一个解决方案是好的,因为它是。我个人不喜欢尽可能地使用“全局”事件处理程序,但这是一个有效且简单的解决方案。我接受了另一个回复,因为我首先看到了它,它有一个代码示例。尽管如此,你的答案还是不错的,因为你说出了正确的答案,甚至还提供了一个备选答案。。。很难在两个答案中做出选择。如果你想包含一个简短的代码示例,我会给你一个绿色的箭头,因为它对其他用户会非常有帮助。不是为了箭,而是为了阐明我的意思。另一个解决方案是好的,因为它是。我个人不喜欢尽可能使用“全局”事件处理程序,但这是一个有效且简单的解决方案。