1

我确实尝试过这样做(使用 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);});
}

我尝试 (type+'Name') 创建对现有变量或对象的引用。

4

5 回答 5

8

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

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

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

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

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

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

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

id

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

或类似的东西。

于 2013-11-04T12:57:38.530 回答
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);});
}
于 2013-11-04T12:57:58.540 回答
0

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

演示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'); 
于 2013-11-04T13:06:29.970 回答
0

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

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

使用ID访问:

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

使用Class访问:

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

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

$("data['"+type+"']").val("...");
于 2013-11-04T13:25:23.960 回答
-2

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

像这样创建一个对象。

var obj = {
   'categoryName': ...

};

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

obj[someString]

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

于 2013-11-04T12:56:31.340 回答