无法获取JavaScript以将ID读取为变量名称

时间:2012-07-26 20:53:43

标签: javascript jquery

  

可能重复:
  Variable name as a string in Javascript

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

我设置我的变量:

 var first_name = "' || i.instructor_fname || '";

我有输入字段:

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

和Escape功能:

if (e.keyCode == 27) { 
   if (document.activeElement.id != "" ) {
       $("#" + document.activeElement.id)
                 .val(document.activeElement.id);
   }
}

对于first_name,输出为first_name。正确设置该值,因为文本框已正确填充。似乎我没有将'first_name'作为变量读取,而是作为字符串读取。我尝试了一些加入文字的组合,但仍然没有运气。有什么想法吗?同样,我知道我可以使用其他技术,但似乎想出这个可能会对其他项目派上用场。

4 个答案:

答案 0 :(得分:1)

我不确定我理解,但也许你需要在document.activeElement.id上调用eval()。

答案 1 :(得分:0)

我不确定我也明白,但这有多接近?

http://jsfiddle.net/PXcD8/

HTML:

<input type="text" id="foobar">

JS:

$(function()
{
    $(':text').each(function()
    {
        var text = $(this);
        text.keyup(function(event)
        {
            if (event.which == 27)
                reset_textbox();
        });

        reset_textbox();

        function reset_textbox()
        {
                text.val(text.attr('id'));            
        }
    });
});

这会将文本字段的文本设置为与其id最初相同的值,并且当用户按下escape时将其设置为焦点。

答案 2 :(得分:0)

更合适的解决方案是创建field_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]);

答案 3 :(得分:0)

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

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

然后在你的Escape键处理程序

if (e.keyCode == 27) if (document.activeElement.id != "" ) {
    var e = $("#" + document.activeElement.id);
    e.val(e.attr('default-value'));
}

就个人而言,这感觉比javascript变量漂浮得更优雅/更清洁。

另外......

考虑到实现,假设 default-value 始终与输入元素初始匹配,那么您甚至不需要更改服务器为您的标记呈现标记的方式页。即仍然渲染原始输入元素(减去默认值属性)。

<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());
    });
})