jQuery .click()不会在IE中触发函数

时间:2013-07-17 17:03:52

标签: javascript jquery

我有一个html表单,在提交之前运行javascript函数。表单标记的html是:

<form onsubmit="return sub();" method="post" action="useclick.php">

提交按钮的html为:

<input type="submit" value="Submit" id="submit"/>

一切正常,但我希望用户能够在任何地方按Enter键并提交表单,所以我有这段代码:

$(document).keypress(function(e) {
    if(e.which == 13) {
        $(this).blur();
        $('#submit').focus().click();
    }
});

除了IE之外,这正是我想要的所有浏览器。在IE中,它确实单击了提交按钮,然后发送表单,但它不首先运行sub()函数。它在IE 8和10中是相同的,这是我目前唯一可以访问的版本。

为完整起见,sub()函数如下所示:

function sub(){
    document.getElementsByName('coords')[0].value = JSON.stringify(coordsArray);
    return true;
}

我对javascript很新,对jQuery很新,所以任何帮助都会非常有用。

2 个答案:

答案 0 :(得分:3)

你试过了吗?

$(document).keypress(function(e) {
       if(e.which == 13) {
        $(this).blur();
        $('#your_form_id').submit();
        return false;
       }
    });

从某种意义上说,您是以编程方式提交和阻止随后的事件链。

<强>更新 更改了它并进行了JSFiddle演示。让我知道它是否适合你。

<h2>Form</h2>
<form action="" method="post" id="myform">
   First Name:<input type="text" name="Fname" maxlength="12" size="12"/> <br/>
   Last Name:<input type="text" name="Lname" maxlength="36" size="12"/> <br/>

   <p><input id="submit" type="submit" /></p>
</form>
<h2>JSON</h2>
<pre id="result">
</pre>
<script>
            $.fn.serializeObject = function()
            {
                var o = {};
                var a = this.serializeArray();
                $.each(a, function() {
                    if (o[this.name] !== undefined) {
                        if (!o[this.name].push) {
                            o[this.name] = [o[this.name]];
                        }
                        o[this.name].push(this.value || '');
                    } else {
                        o[this.name] = this.value || '';
                    }
                });
                return o;
            };
            $(' input').keypress(function(e) {
                if(e.which == 13) {
                    console.log('Enter pressed');
                    $('#submit').blur();
                    $('#myform').submit();
                    e.preventDefault();
                    return false;
                }
            });
            $(function() {
                $('form').submit(function() {
                    console.log('submitted');
                    $('#result').text(JSON.stringify($('form').serializeObject()));
                    return false;
                });
            });
</script>

更新#2 嗨,你需要确保绑定到你想听的元素。在这种情况下,文档中的所有元素。通常,要听取关键事件,这些元素应该是可关注的。在这个新的JSFiddle中,输入按下事件如上所述。确保首先在文档中的任何位置聚焦(读取:单击)。 让我知道它是怎么回事。

更新#3 添加了此JSFiddle以确保正文已聚焦且具有tabIndex。如果这对您有用,请接受答案。

答案 1 :(得分:0)

IE对脚本类型严格。因此,请确保使用type="text/javascript"

例如:

<script type="text/javascript" src="script.js"></script>