onchange() 不在 firefox 中触发

onchange() not firing in firefox

这是 jsfiddle:http://jsfiddle.net/xpkFf/330/ 如果您打开对话框,输入用户名和密码,按下按钮并得到 Firefox 的 "remember my password" 提示,如果单击下拉菜单导致出现提示,那么当您第一次从下拉菜单中选择一个选项时,onchange 将不起作用解雇。有人知道解决办法吗?

编辑:Jsfiddle 似乎已关闭,如果有人可以重现我的问题,这里有一个 jsbin http://jsbin.com/wecasehanu/1/

HTML

 <div id="dialog">
        <form autocomplete="off">
            <input id="username" type="text"/>
            <input id="password" type="password"/>
            <button type="submit" style="height:30px;width:30px;"/>
        </form>
    </div>
    <a href="#" id="open">Open dialog</a>
    <select id="ih8ff">
        <option>1</option>
        <option>2</option>
    </select>

Javascript

$('#open').click(function() {
    $('#dialog').dialog('open');

});

$('#ih8ff').change(function(){
alert("changed");
});

$('#dialog').dialog({
    autoOpen: false,
    modal: false
});

改用on input。 Chrome 和 Safari 处理 change 的方式与 Firefox 不同。但是,input 个事件的处理方式相同。

$('#open').click(function() {
    $('#dialog').dialog('open');

});

$('#ih8ff').on("input change",function(){
alert("changed");
});

$('#dialog').dialog({
    autoOpen: false,
    modal: false
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="dialog">
        <form autocomplete="off">
            <input id="username" type="text"/>
            <input id="password" type="password"/>
            <button type="submit" style="height:30px;width:30px;"/>
        </form>
    </div>
    <a href="#" id="open">Open dialog</a>
    <select id="ih8ff">
        <option>1</option>
        <option>2</option>
    </select>

终于找到了破解方法。这是一个显示它的 jsfiddle:http://jsfiddle.net/xpkFf/332/ 经过测试,除了mouseup之外,点击下拉菜单后所有事件都被取消了,所以我只是捕获了鼠标的坐标并确保我在select框中。我已将错误提交给 mozilla,希望他们能修复它。

代码

$('#open').click(function() {
    $('#dialog').dialog('open');

});
var ddstate;
$('#ih8ff').change(function(){
    alert("changed");
});
$('#ih8ff').click(function(){
if(ddstate==undefined)
    ddstate=true;
});
$('#dialog').dialog({
    autoOpen: false,
    modal: false
});
$(window).mouseup(function(e) {
    if(ddstate){
        var x= e.clientX;
        var y= e.clientY;
        if(x > 85 && x < 119 && y > 42 && y < 62)
        {
            $("#ih8ff").val("2");
            $('#ih8ff').change();
            ddstate=false;
        }
    }
});