Can';不要让JavaScript将ID作为变量名读取

Can';不要让JavaScript将ID作为变量名读取,javascript,jquery,Javascript,Jquery,可能重复: 我想做的是有一个输入字段来编辑一些信息。我对它进行了设置,以便在每个字段发生更改时(文本框和复选框的组合),AJAX更新信息并在配置文件框中显示更改(服务器负载较低,这里不关心效率)。如果用户点击Escape,我希望文本框中的值恢复为原始值(如果他们正在编辑他们改变主意的字段)。对于文本框,我遇到了一个变量问题-我知道我可以使用数组或隐藏字段,但现在我想知道如何使此版本工作:) 我设置了变量: var first_name = "' || i.instructor_fname |

可能重复:

我想做的是有一个输入字段来编辑一些信息。我对它进行了设置,以便在每个字段发生更改时(文本框和复选框的组合),AJAX更新信息并在配置文件框中显示更改(服务器负载较低,这里不关心效率)。如果用户点击Escape,我希望文本框中的值恢复为原始值(如果他们正在编辑他们改变主意的字段)。对于文本框,我遇到了一个变量问题-我知道我可以使用数组或隐藏字段,但现在我想知道如何使此版本工作:)

我设置了变量:

 var first_name = "' || i.instructor_fname || '";
我有我的输入字段:

<input type="text" id="first_name" value="' || i.instructor_fname ||'">

对于first_name,输出为first_name。该值设置正确,因为文本框填充正确。似乎我没有把“first_name”作为变量来读,而是作为字符串来读。我尝试了一些将文字连接到它的组合,但仍然没有成功。有什么想法吗?同样,我知道我可以使用其他技术来实现这一点,但这似乎对其他项目有用。

我不确定我是否理解,但也许您需要调用document.activeElement.id上的eval()。

我不确定我是否理解,但也许您需要调用eval()关于document.activeElement.id.

我也不确定我是否理解,但这离我们有多近

html:


这将在用户按下escape使其聚焦时,将文本字段的文本设置为与其id相同的值。

我也不确定我是否理解,但这有多接近

html:


这将在用户按下escape使其聚焦时,将文本字段的文本设置为与其id相同的值。

更合适的解决方案是创建
字段id->value
映射。这可以通过对象轻松完成:

var field_values = {
    first_name: "' || i.instructor_fname || '",
    last_name: "...',
    // ...
};
然后,只需使用括号表示法即可获得值:

$("#" + document.activeElement.id)
    .val(field_values[document.activeElement.id]);
假设已执行的处理程序绑定到要修改的元素,代码将变得非常简单:

$(this).val(field_values[this.id]);

更合适的解决方案是创建一个
field\u id->value
map。这可以通过对象轻松完成:

var field_values = {
    first_name: "' || i.instructor_fname || '",
    last_name: "...',
    // ...
};
然后,只需使用括号表示法即可获得值:

$("#" + document.activeElement.id)
    .val(field_values[document.activeElement.id]);
假设已执行的处理程序绑定到要修改的元素,代码将变得非常简单:

$(this).val(field_values[this.id]);

如果您正在寻找替代解决方案,为什么不简单地在输入中包含一个默认值属性呢

<input type="text" id="first_name" value="' || i.instructor_fname ||'"
    default-value="' || i.instructor_fname ||'" />
就个人而言,这比让javascript变量四处浮动感觉更优雅/更干净

此外…

假设默认值始终与输入元素的初始值匹配,那么您甚至不需要更改服务器为页面呈现标记的方式。也就是说,仍然呈现原始输入元素(减去默认值属性)


如果您正在寻找替代解决方案,为什么不简单地在输入中包含一个默认值属性呢

<input type="text" id="first_name" value="' || i.instructor_fname ||'"
    default-value="' || i.instructor_fname ||'" />
就个人而言,这比让javascript变量四处浮动感觉更优雅/更干净

此外…

假设默认值始终与输入元素的初始值匹配,那么您甚至不需要更改服务器为页面呈现标记的方式。也就是说,仍然呈现原始输入元素(减去默认值属性)



嗯,
document.activeElement.id
是一个字符串,为什么您希望JavaScript将其解释为变量名?您从不使用变量。。。值
“first_name”
在一些地方使用。那么我是否处于死胡同?你应该看看我链接到的问题。@FelixKling OP已经指出,他知道数组和其他技术是可用的。另外,我不认为这是你提供的链接的副本。OP实际上希望将字符串作为变量进行求值,以使用vars值。您的链接询问如何对变量进行反思,以将变量名称作为字符串。我就是这样理解的。嗯,
document.activeElement.id
是一个字符串,为什么你希望JavaScript将其解释为变量名?你从不使用变量。。。值
“first_name”
在一些地方使用。那么我是否处于死胡同?你应该看看我链接到的问题。@FelixKling OP已经指出,他知道数组和其他技术是可用的。另外,我不认为这是你提供的链接的副本。OP实际上希望将字符串作为变量进行求值,以使用vars值。您的链接询问如何对变量进行反思,以将变量名称作为字符串。不管怎么说,我就是这样读的。这正是我所需要的!它不会让我在8分钟内“检查”这个答案。有一个比
eval
好得多的方法:我还在学习JS-为什么使用eval是坏的/错误的?它看起来很简单,对我的问题非常有效。@ini:这不是一个好的解决方案。您实际需要的是一个特定的数据结构,一个
字段名->原始值的映射。您可以在JavaScript中使用对象来实现这一点。为正确的任务使用正确的工具。@ini
eval
应该不惜一切代价避免,因为它授予被评估字符串许多特权。这是一个潜在的安全问题,而且速度很慢,因为JS引擎需要解析字符串。这正是我需要的!它不会让我在8分钟内“检查”这个答案。有一个比
eval
好得多的方法:我还在学习JS-为什么使用eval是坏的/错误的?它看起来很简单,对我的问题非常有效。@ini:这不是一个好的解决方案。您实际需要的是一个特定的数据结构,一个
字段名->原始值的映射。您可以在JavaScript中使用对象来实现这一点。使用正确的工具进行测试
<input type="text" id="first_name" value="' || i.instructor_fname ||'" />​
$(document).ready(function() {
    $('input').each(function() {
        var e = $(this);
        e.attr('default-value', e.val());
    });
})