Javascript 在对象文本的值内访问用户输入

Javascript 在对象文本的值内访问用户输入,javascript,object,object-literal,Javascript,Object,Object Literal,这些论坛太棒了,我得到的贡献者真的很有才华。因此,每当我不能解决自己的问题或不理解编程概念时,我都会回来。这当然是后一次了 在目前为止我得到的帮助下,我成功地开发了一个复杂的表单,最终用户将主要单击一系列复选框,并在几个文本字段中输入一些数据。根据上述操作,这些操作的结果将使用各种文本填充一些文本框 填充文本区域的文本由每个复选框在几个对象文本中引用。这个工作很好,这个网站很有用 在我的对象文本中,有name:value对,其中“value”是一个文本字符串。我一直试图在一些名称中包含一个变量:

这些论坛太棒了,我得到的贡献者真的很有才华。因此,每当我不能解决自己的问题或不理解编程概念时,我都会回来。这当然是后一次了

在目前为止我得到的帮助下,我成功地开发了一个复杂的表单,最终用户将主要单击一系列复选框,并在几个文本字段中输入一些数据。根据上述操作,这些操作的结果将使用各种文本填充一些文本框

填充文本区域的文本由每个复选框在几个对象文本中引用。这个工作很好,这个网站很有用

在我的对象文本中,有name:value对,其中“value”是一个文本字符串。我一直试图在一些名称中包含一个变量:值对,但没有成功。这总是会中断脚本,因为变量从未定义/在页面加载时具有“null”值

比如说,

而不是

    var example = {
var1:'some string',
var2:'some other string'
  }
我试过了

var somevariable = document.getElementById('someId');
var example = {
var1: 'some string' + somevariable + 'some other bit',
var2: 'some other string'
}
我的问题是,是否可以将脚本中其他地方引用的变量包含在对象文本的name:value对中?


作为参考(因为它是一个相当长的脚本),我的网站是:。

简短的回答是肯定的。下面是一个工作示例:

var myStr = "world";
var obj = { var1: "hello " + myStr };
console.log(obj.var1); // Outputs: hello world

正如我在评论中提到的,您的特定示例有几个语法错误,因此也许只要修复这些错误就可以纠正您的问题。

使用对象文字的诀窍是立即对其求值;没有“简单”的方法来延迟您获得的价值

var x = "Alice";
var obj = { greeting: "Hello, " + x + "." };
console.log(obj.greeting);  // "Hello, Alice."
x = "Bob";
console.log(obj.greeting);  // "Hello, Alice."
obj = { greeting: "Hello, " + x + "." };
console.log(obj.greeting);  // "Hello, Bob."
稍后再讨论的内容:

如果您确实需要将变量放入稍后定义的字符串文字中,则可以创建一个内联函数。通过这种方式,它不是一个简单的字符串,而是一个您调用的函数(类似于
obj.greeting()
)。这意味着在声明对象时,它不是计算字符串值,而是在调用函数时声明。这是Javascript的一个非常强大的功能,称为“闭包”,您可以花一整天的时间来学习使用闭包时的预期和意外行为

var x = "Alice";
var obj = { greeting: function() { return "Hello, " + x + "." }};
console.log(obj.greeting());  // "Hello, Alice."
x = "Bob";
console.log(obj.greeting());  // "Hello, Bob."

可以在对象文字的值中包含变量。在您的特定示例中,您有两个问题:应该是
getElementById
,我假设
someId
是一个文本字段,如果是这样,您需要执行类似以下操作:
document.getElementById('someId')。value
Hi,感谢您的评论。是的,“somevariable”指的是文本字段的值。在页面加载时,文本字段是空的,我假设由于对象文本正在查找变量值,所以空字段返回null。你认为这就是为什么我的控制台告诉我错误为空值的原因吗?我注意到你在
getElementById
上的编辑,但是你的“b”仍然是小写的,所以这可能仍然是语法。一般来说,textfield的值要么是空字符串,要么是textfield中键入的任何内容。好的。然后,在页面加载时——我想包含在我的name:value对中的变量可能没有在html中进一步创建——因为会立即计算对象文本?如果改为
var x=“Alice”
var x=document.getElementById('someId').value,函数将无法工作,因为id='someId'的输入是在对对象求值之后出现的-正确吗?@user1837608 Right。如果你说
varb={value:a};var a=20
第一条语句将是错误的,因为第二条语句尚未计算(因此
a
还不存在)。谢谢Jeff。我在我复杂的网站上没有看到这种因果关系错误,但通过你给出的简单例子,它是有道理的。我将不得不花一些时间来学习闭包——但我感觉我无法将您的第二个示例合并到我的站点结构中。啊!谢谢我在上面的例子中快速使用了语法,但在我的网站上一切都很好。Jeff上面的例子表明,我在调用对象文本中不存在的变量,这是由于我的对象立即求值。这很可能就是问题所在。如果您可以创建一个更具体的简单示例,我们可以帮助您进一步查明问题。如果代码有点长,可以尝试使用创建该示例。