0

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

<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 没有。有人有线索吗?

4

3 回答 3

1

也许onblur最适合这个:

<input onblur="checkDomain(true); return false;" type="text" id="dsearch" value="" name="domain" maxlength="30"/>
于 2012-09-17T12:09:04.403 回答
1

我不记得我在哪里读到它了,但你应该使用.keydown()/ .keyup()/ .keypress()(任何适合你的需要)而不是 onchange。至少对于input[type=text].

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

在您的问题中看到这一点:“在您输入文本并单击其他位置后”,让我得出结论,您需要 .blur() 函数。

   $("input[type=text]").blur(function(){
       console.log('checkDomain() called!')
   });
于 2012-09-17T12:15:29.733 回答
0

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

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

作为一个例子,考虑你的输入有一个 jQuery 函数,当用户点击键盘时它会做一些事情。

您需要致电input.trigger("onchange");以确保 onchange 在之后keypress触发keydown

/**
 * 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);
于 2013-11-12T08:26:21.180 回答