Firefox onchange没有调用函数

时间:2012-09-17 12:06:53

标签: javascript javascript-events

我有一个包含输入的表单:

<input onchange="checkDomain(true); return false;" type="text" id="dsearch" value="" name="domain" maxlength="30"/>

在Opera,Chrome和IE中运行良好 - 但Firefox和Safari在调用函数checkDomain()时遇到问题。我在函数中添加了一行进行调试:

function checkDomain(check) 
{
console.log('checkDomain() called!'); 
// do rest of the stuff...
}

因此,Chrome / Opera / IE在输入文本并单击其他位置后调用该函数没有问题 - 但Firefox / Safari没有。任何人都有线索?

3 个答案:

答案 0 :(得分:1)

也许onblur最适合这个:

<input onblur="checkDomain(true); return false;" type="text" id="dsearch" value="" name="domain" maxlength="30"/>

答案 1 :(得分:1)

我不记得我在哪里阅读它,但你应该使用.keydown() / .keyup() / .keypress()(无论你需要什么)而不是改变。至少input[type=text]

您也可以将.blur().focus用于各自的目的。

在你的问题中看到这一点:“在你输入文字并点击其他地方之后”,让我得出结论你需要.blur()函数。

   $("input[type=text]").blur(function(){
       console.log('checkDomain() called!')
   });

答案 2 :(得分:0)

当您更改输入按键和按键的行为时会发生此问题。

您需要手动调用onchange触发器才能触发它。

作为一个例子,考虑一下你的输入有一个jQuery函数,它可以在用户点击键盘时执行一些操作。

您需要致电input.trigger("onchange");以确保在keypresskeydown

之后触发onchange
/**
 * Keyboard Manager
 */
(function($) {
    $.fn.inputManager = function(options) {
        };
        options = $.extend(defaults, options);

        // The key down event only use to manage key board language changes
        var keyDown = function(e) {
           //Do something
        };

        var keyPress = function(e) {
            //Do something
        };

        return this.each(function() {
            var input = $(this);

            //The Firefox dose not trigger the input onchange when you change keypress and key down
            //functions. So manually call it!
            input.keypress(function(e) {
                keyPress(e);
                input.trigger("onchange");
            });
            input.keydown(function(e) {
                keyDown(e);
                input.trigger("onchange");
            });
        });
    };
})(jQuery);