在JavaScript中有一种方法可以使用字符串+变量作为变量

时间:2013-11-04 12:54:56

标签: javascript jquery

我确实试过这个(使用jQuery):

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

这是控制台响应:

  

未捕获的TypeError:对象categoryName没有方法' 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);});
}

我尝试(键入+' Name')来创建对现有var或对象的引用。

5 个答案:

答案 0 :(得分:8)

你的问题不在于连接。这很好。您将type'Name'连接起来,然后得到字符串'categoryName'。然后你这样做:

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

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

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

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

当然,这也不太可行,除非您的标签名为categoryName的元素。大概你真的想要那个类的元素:

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

id

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

或类似的东西。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

DEMO1 DEMO2

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'); 

答案 3 :(得分:0)

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

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

使用 ID 进行访问:

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

使用 Class 进行访问:

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

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

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

答案 4 :(得分:-2)

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

创建一个这样的对象。

var obj = {
   'categoryName': ...

};

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

obj[someString]

eval是一个不明智的选择。

相关问题