在Safai的最新版本中提交之前的操作

时间:2013-06-17 17:35:20

标签: javascript jquery safari osx-mountain-lion

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

以下是参考文献清单:

  1. jQuery show() function is not executed in Safari if submit handler returns true
  2. JavaScript commands not executed in order in Safari
  3. Why is setTimeout(fn, 0) sometimes useful?
  4. setTimeout with zero delay used often in web pages, why?
  5. 我有最新版本的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”属性的提交按钮。 因此,没有选项可以阻止单击事件的默认情况,并在提交表格programaticaly之后。 :(

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

    我真正希望使用此代码隐藏和显示html页面的正确元素。 代码将应用页面上的样式相关部分,并在返回后使用提交而不隐藏/绘制适当的元素。

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

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

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

    每一条评论都会受到欢迎并且非常感激!

    最诚挚的问候!

1 个答案:

答案 0 :(得分: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