0

我已经阅读了很多关于javascript中事件的时间和处理的线程,但是我还没有找到解决我的问题的方法,或者至少我是个白痴:(。

以下是参考文献列表:

  1. 如果提交处理程序返回 true,则不会在 Safari 中执行 jQuery show() 函数
  2. JavaScript 命令未在 Safari 中按顺序执行
  3. 为什么 setTimeout(fn, 0) 有时有用?
  4. 网页中经常使用的零延迟setTimeout,为什么?

我有最新版本的 OsX (Mountain Lion) 和最新版本的 safari 以及以下代码:

function handler(btn, form,content){
var submitHandler = function(){
    form.submit(function(e){
        return true;
    });
};

btn.click(function(e){
    form.children().hide();       //command1
    content.show();               //command2
    setTimeout(submitHandler,0);  //command3
});

}

我还创建了一个 JsFiddle 示例来表示我的问题:http: //jsfiddle.net/nxjohny/t4s5W/1/ 不幸的是,我必须使用带有 name="submit" 属性的提交按钮。因此,没有选项可以防止默认单击事件并在以编程方式提交表单后。:(

代码将在用户单击按钮时执行,命令执行它们必须执行的操作:command1 隐藏表单的子元素。(添加 style="display: hidden;" 到子元素。command2 将显示表单的隐藏部分。(添加 style="display:block" 到相应元素)。在事件处理程序接受 form.submit 和返回真。

我实际上想要用这段代码隐藏和显示 html 页面的正确元素。该代码将在页面上应用与样式相关的部分,并在提交返回后不隐藏/绘制正确的元素。

此代码适用于 Chrome、Linux/Windows/OsX 中的 Firefox 和 Windows 中的 Safari,但 Osx-Safari 6.XX 除外

此代码适用于 Safari 5.XX 和 OsX。

在提交之前,我应该在代码中添加什么来真正隐藏和显示元素?

每一条评论都将受到欢迎和感激!

此致!

4

1 回答 1

0

有一种方法可以使用 call() 的魔力提交表单

function submitMyForm() {

    //reference to the form you want to submit
    var oldForm = document.getElementById("myForm");

    //How you would normally submit the form
    //oldForm.submit(); //Uncaught TypeError: Property 'submit' of object #<HTMLFormElement> is not a function    

    //How you can submit the form with the "submit" naming conflict
    var newForm  = document.createElement('form');  //create a new form and leach off its submit
    newForm.submit.call(oldForm);  //will submit the form without the error above
}

将提交值传递给服务器

function submitMyForm(oldForm, button) {

    var input = document.createElement("input");
    input.type = "hidden";
    input.name = "submit";
    input.value = button.value || "Submit";
    oldForm.removeChild(button);
    oldForm.appendChild(input);

    var newForm = document.createElement('form');
    newForm.submit.call(oldForm);
}


var frm = document.getElementById("myForm");
var btn = frm.submit;
submitMyForm(frm, btn);

JSFiddle

于 2013-06-17T17:59:42.293 回答