我正在编写一个javascript对象,其中包含一个返回标准表单html的方法。在这个对象中我还有一个方法validate(); 我希望生成的表单使用validate();
因此,验证表单的典型html可能如下所示:
<form id="a" onSubmit="return validate();">
问题是我需要能够引用对象实例
它需要更像onSubmit="my_object.validate();">
我尝试过类似的东西
return '<form id="a" onSubmit="return ' + this.validate + '();">';
但我的行为真的很奇怪。
如果我使validate函数任意返回true表单被提交,false则不然。如果我在方法中进行任何其他计算,我会收到此错误:
> Error: syntax error Source Code:
> return id ==
有没有人经历过这样的事情?
答案 0 :(得分:5)
您可以输出HTML,获取对表单对象的引用,然后以编程方式附加事件处理程序,而不是在HTML属性中输出事件处理程序,如下所示:
<html>
<head>
<script type="text/javascript">
var my_object = {
outputForm: function(container) {
container.innerHTML =
'<form id="a"><input type="submit" value="Validate" /></form>';
this.createdForm = document.getElementById('a');
this.createdForm.onsubmit = this.validate;
},
validate: function() {
// use this.createdForm to get at the controls.
alert("Who dares awake my slumber?");
}
};
function createTheForm() {
my_object.outputForm(document.getElementById('container'));
}
</script>
</head>
<body onload="createTheForm()">
<div id="container"></div>
</body>
</html>
答案 1 :(得分:0)
很抱歉发布此作为答案,注册后不会让我编辑我的原始帖子作为非注册用户?
我想到了eval,但我不确定如何在这种情况下使用它?我已经尝试过了
' onSubmit="return eval(' + this.validate+'();)">';
和其他一些变化,但我得到了同样的错误。
我希望避免手动添加事件处理,因为我希望它是非常独立的。我正在考虑设置一个常规函数,它位于对象之外,然后执行类似
的操作' onSubmit="return my_function(' + this + ');">';
然后在my_function中执行此操作:
my_function(given){ return given.validate(); }
这似乎是一个糟糕的黑客,我甚至不确定它是否会起作用。
答案 2 :(得分:0)
为什么在将元素添加到页面并使用闭包来保持范围后,不仅仅将它应用于元素?
var myId = "bar" + index;
foo.innerHTML="<form id='" + myId + "'>...</form>";
var that = this;
document.getElementById(myId).onsubmit = function(){ that.validate(this); }
向标记添加事件处理程序总是一个坏主意。
答案 3 :(得分:-2)
使用eval()以javascript
执行字符串<强> [EDIT} 强> 听起来就像你需要对表单进行原型设计然后在提交中调用this.validate()。使用javascript创建表单对象时获取对该表单对象的引用,然后定义验证方法并将其分配给validate属性。