-3

我想知道是否可以将html dom引用放在js oop中。虽然网上有很多 JS OOP 教程,但我还没有看到与我所指的类似的东西。下面的代码就是我所指的。

var form = {
  fname : document.getElementById("fname").value;
};

例如,这document.getElementById("fname").value是一个值为“jacob”的文本框。会form.fname = "jacob"吗?

这可以吗?这是一种常见的做法吗?

4

2 回答 2

0

如果对象是在加载事件之后创建的,则可以这样做,这样您就可以确保元素“fname”已初始化......例如......

$(document).ready(function(){
   var form = {
     fname : document.getElementById("fname").value;
    };
});

如果您不想使用 jQuery,这里是另一个示例...

window.addEvent('load',function(){
  //your object ...
  });
于 2012-06-27T05:48:34.847 回答
-1

我不确定您要在这里完成什么。如果您只需要一次检索当前输入字段中的值,那么这应该没问题。如果您期望 form.fname 的值在输入值更改时不断更新,那么您不会看到这种情况发生。您要么需要一些与输入的更改事件相关联的处理程序,要么您需要做更多类似这样的事情:

var form = {
  fname: function () {
    return document.getElementById('fname').value;
  }
};

// Retrieving
form.fname()

请注意,您现在必须调用 fname 函数,不能简单地将其称为form.fname.

如果您真的不想重新输入内容,请执行以下操作:

var fields = ['fname', 'lname', 'city', 'state'];
var form = {};
for (var i = 0, j = fields.length; i < j; ++i) {
  form[fields[i]] = function () {
    return document.getElementById(fields[i]).value;
  }
}

如果您将下拉列表之类的内容添加到表单中,则必须更加小心,因为它们.value没有那么有用,但是如果名称发生更改,则不要重新输入名称。

而且,如果我们真的想对它感兴趣,你甚至不必在获取值时输入名称:

for (var i = 0, j = fields.length; i < j; ++i) {
  console.log(form[fields[i]]())
}
于 2012-06-27T05:45:35.297 回答