我已经阅读了很多关于javascript中事件的时间和处理的线索,但我还没有找到解决我的问题的方法,或者至少我是个白痴:(。
以下是参考文献清单:
我有最新版本的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。
我应该在代码中添加什么来真正隐藏和显示元素才能提交?
每一条评论都会受到欢迎并且非常感激!
最诚挚的问候!
答案 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);