0

我正在编写一个 javascript 对象,该对象包含一个返回标准表单的 html 的方法。在这个对象中,我还有一个方法 validate(); 我希望生成的表单使用 validate();

因此,带有验证的表单的典型 html 可能如下所示:

<form id="a" onSubmit="return validate();">

问题是我需要能够引用对象实例,所以它需要更像onSubmit="my_object.validate();">

我已经尝试过类似的东西, return '<form id="a" onSubmit="return ' + this.validate + '();">'; 但我得到了非常奇怪的行为。

如果我让验证函数任意返回 true 表单被提交, false 它不会。如果我在该方法中进行任何其他计算,我会收到此错误:

> Error: syntax error Source Code:
>     return id ==

有没有人经历过这样的事情?

4

4 回答 4

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>
于 2009-07-11T08:13:47.793 回答
0

很抱歉将其发布为答案,注册后它不会让我以非注册用户的身份编辑我的原始帖子?

我考虑过 eval 但我不确定如何在这种情况下使用它?我试过这样

' onSubmit="return eval(' + this.validate+'();)">';

和其他一些变化,但我得到了同样的错误。

我想避免手动添加事件处理,因为我希望它非常独立。我正在考虑设置一个位于对象外部的常规函数​​,然后执行类似的操作

' onSubmit="return my_function(' + this + ');">';

然后在 my_function 中执行以下操作:

my_function(given){ return given.validate(); }

这似乎是一个可怕的黑客攻击,我什至不确定它是否会起作用。

于 2009-07-11T08:17:26.850 回答
0

为什么在将元素添加到页面并使用闭包来保持范围之后,不只是将其应用于元素?

var myId = "bar" + index;
foo.innerHTML="<form id='" + myId + "'>...</form>";
var that = this;
document.getElementById(myId).onsubmit = function(){ that.validate(this); }

向标记添加事件处理程序总是一个坏主意。

于 2009-07-11T13:28:29.527 回答
-2

使用 eval() 将字符串作为 javascript 执行

[编辑} 听起来你需要对表单进行原型设计,然后在提交时调用 this.validate()。使用 javascript 创建表单对象时获取对表单对象的引用,然后定义验证方法并将其分配给 validate 属性。

于 2009-07-11T08:06:07.997 回答