我确实试过这个(使用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或对象的引用。
答案 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)
您可以创建一个函数并使用它的返回值:
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
是一个不明智的选择。