onclick事件不适用于选项
以下是我的代码在Firefox中运行良好,但在chrome中没有。 请让我知道如何解决这个问题。 主要思想是根据选择框的选定值调用js函数:
-- Select question type for this quiz -- 1) MCQs 2) True/False
option
s不会在chrome中触发鼠标事件。
对于select
元素,您将在select本身上使用onchange
事件,而select的值将始终与所选选项的值相同
用jQuery就可以了
$('select').on('change', function() { var selected = this.value; });
现在我看到很多人都在问为什么不是改变事件,因为我不想这样做
我也不想这样做
当然有很多花哨的css东西你可以和js一起来克服这种情况,但这意味着更多的代码和更多的事件以及更多可能出错的东西……
作为用户,如果我想要的选项是第一个,为什么我首先必须点击下一个,这样我才能选择第一个! 我的第一个直觉是点击第一个! 但是,这不会选择该选项,它不会触发事件:(
这就是为什么我们希望将click事件与我们也将使用的更改事件相关联的一个很好的理由。 (像腰带和吊带……)
现在我也阅读了很多答案/post“你不能,使用改变”,但实际上这并不完全正确,你可以点击事件来激发选择选项,但是我让它工作的唯一方法是你定义一个大小> 1,这使它更像一个列表而不是一个下拉列表,也许这就是为什么它的工作原理…
但是,如果您尝试以下列方式执行此操作,它将无法正常工作!
$("#select option").on('click',function(){}); //won't work! $(".option-class").on('click',function(){}); //won't work! //won't work!
一种不同的方法是向事件监听器而不是选项添加事件监听器。
var e = document.getElementById("qtype"); var selectedSelect= e.options[e.selectedIndex].value;
上面的代码将找到select元素并将其命名为e。 然后找到所选的值并将其命名为selectedSelect。 然后你可以简单地将这个值传递给question_type()函数。
$(document).ready(function(){ $("#qtype").change(function(){ $(this).find('option:selected') // do something.... } })
我发现了一个有趣的发现,它对这个问题产生了重大影响。 注意:这发生在Chrome版本63.0.3239.108(官方版本)(64位)上,在Windows 7上运行。我在这里报告的内容可能与其他平台上运行的Chrome有所不同,但无论如何都值得调查,以防相同的解决方案适用于其他平台。
我写了一些代码,创建弹出对话框,允许我选择各种选项。 该代码允许对话按顺序一个接一个地出现,并以相反的顺序解除。 然后将此代码耦合到两个对话框,两个对话框都包含选择控件。
然后我编写了一个函数,用选项元素填充那些选择控件,这些元素将click事件监听器附加到选项中。 正确调用该函数将数据附加到附加到相关选择控件的选项。
然后启动了对话#1。 操作了select控件,click事件适用于我选择的选项,所有这些都可以通过Crome调试器轻松观察[1],以及[2]事件监听器代码对对话中其他DOM元素的影响。
然后启动对话#2,并将其覆盖在对话#1上。
然后操纵选择控件,并且…… 没有触发任何点击事件 。
有什么区别?
区别在于对话#1上的选择控件设置了大小属性(特别是size =“5”)。 对话#2上的选择控件没有设置大小属性。
我在Dialogue#2上的select控件上设置size属性的那一刻,再次正确触发了click事件。
如果您希望点击事件与Chrome上的选择控件中的选项一起使用,则必须在选择控件上设置尺寸属性,即:
如果从选择控件中省略此属性,则将忽略单击事件。
现在还有待确定,如果必须在运行JavaScript代码之前直接在HTML文件中设置size属性,或者在附加选项之前在JavaScript中设置size属性也是有效的。 让我在测试时再回到这一点。
编辑:我刚刚测试过,看看是否在JavaScript中的select控件中添加了一个size属性,而不是在HTML文件中,可以作为一种方法,在Chrome中的选项元素上正确处理点击事件(版本细节与之前),这也有效。 所以,代码如:
sel = document.getElementById("PickSecondaryClue"); sel.setAttribute("size","5");
也会工作。
显然,有一些特殊的警告适用于Chrome中的尺寸属性以考虑 – 某些值被记录,至少在某些版本中,因为表现出意想不到的副作用。
现在仍然可以看看它是否也适用于Firefox。
编辑2:也适用于Firefox。 (57.0.2 64位)