JavaScript 中有没有办法使用 string+variable 作为变量

is there a way in JavaScript to use string+variable as a variable

本文关键字:string+variable 变量 有没有 JavaScript      更新时间:2023-09-26

我确实尝试这样做(使用jQuery):

type = (blabla == blublu)? 'category':'regular';
(type+'Name').val('...');

这是控制台响应:

未捕获的类型错误:对象类别名称没有方法"val"

虽然它们确实存在...

那么我怎样才能让它工作呢?

编辑:

这是完整的功能:

var type = (1 == 1)?'something':'blabla';
var somethingName = $('#somethingName');
var blablaName = $('#blablaName');
more variables like this..
function itemMode(mode, inputValue){
  inputValue = (typeof inputValue !== 'undefined')? inputValue:'';
  var functionName = null;
  switch(mode){
  case 'open':
    btnValue = 'something';
    functionName = editCategory; // this need to be from type to
    openItem = true;
    break;
  case 'close':
    btnValue = 'something';
    functionName = addCategory; // this need to be from type to
    openItem = false;
    break;
  default:
    return false;
  }
  (type+'Name').val(inputValue);
  $('#btn'+type.capitalize()).off('click').val(btnValue).click(functionName);
  (type+'Name').off('keypress').keypress(function(e){enterPress(e,functionName);});
}

我尝试(类型+"名称")对现有 var 或对象的引用。

您的问题不在于串联。这工作正常。你用'Name'连接type,得到字符串'categoryName'。然后,您可以执行以下操作:

('categoryName').val(...);

这与 'categoryName'.val(...) 相同,这显然不起作用,因为字符串没有val方法。

您正在尝试执行 jQuery 选择,为此您需要 jQuery 构造函数:

$(type+'Name').val('...');

当然,这也不太可能起作用,除非您有标签名称为 categoryName 的元素。大概你实际上想要具有该类的元素:

$('.' + type + 'Name')

id

$('#' + type + 'Name')

或类似的东西。

变量被创建为窗口对象的属性,所以如果它们是全局的,你可以这样做......

window[type + "Name"]

由于您要引用"缓存的"jQuery 对象,请使用以下命令...

(window[type + "Name"]).val("123");

例如,如果您缓存了这样的 jQuery 对象...

var sumVar = $('#sumid');

你可以像这样直接引用它...

sumVar.val("123");

或者你可以使用变量作为名称来引用它,就像这样......

var varName = "sumVar";
(window[varName]).val("123");

这是您在上面发布的脚本的修改版本...

var type = (1 == 1)?'something':'blabla';
window.somethingName = $('#somethingName');
window.blablaName = $('#blablaName');
function itemMode(mode, inputValue){
    inputValue = (typeof inputValue !== 'undefined')? inputValue:'';
    var functionName = null;
    switch(mode){
        case 'open':
            btnValue = 'something';
            functionName = editCategory; // this need to be from type to
            openItem = true;
            break;
        case 'close':
            btnValue = 'something';
            functionName = addCategory; // this need to be from type to
            openItem = false;
            break;
        default:
            return false;
    }
    (window[type + 'Name']).val(inputValue);
    $('#btn' + type.capitalize()).off('click').val(btnValue).click(functionName);
    (window[type + 'Name']).off('keypress').keypress(function(e){enterPress(e,functionName);});
}

您可以创建一个函数并使用它的返回值:

演示

1       演示2

function type(){
  return (blabla == blublu) ? 'category' : 'regular';
}

$('[name="'+ type() +'Name"]').val('SOME VALUE'); 

如果使用ID而不是name属性:

function type(){
  return (blabla == blublu) ? '#category' : '#regular';
}

$( type() +'Name').val('SOME VALUE'); 

或者只是简单地:

var typeID =  blabla==blublu? '#category' : '#regular';
$( typeID +'Name').val('SOME VALUE'); 

val() 是 jquery 提供的方法。因此,要访问它,您需要使用"$"运算符以及选择模式:

var type = (blabla == blublu)? 'category':'regular';

对于使用 ID 访问:

$("#"+type).val("...");

对于使用访问:

$("."+type).val("...");

用于使用任何自定义属性进行访问,例如。数据

$("data['"+type+"']").val("...");

您只能使用对象键安全地执行此操作。

创建一个这样的对象。

var obj = {
   'categoryName': ...
};

要检索它,请使用如下内容:

obj[someString]

eval是一种选择是不明智的。