Html:
<div id="div1" name="divname">Something</div>
<div id="div2" name="divname">Something else</div>
<div id="output"></div>
Jquery:
$('[name="divname"]').click( function (){
var divnum = $(this).attr('id');
var divout = 'out' + divnum;
var outdiv1 = 'first div clicked';
var outdiv2 = 'second div clicked';
$('#output').html(divout);
});
点击div1后的所需结果:
<div id="output">first div clicked</div>
实际结果:
<div id="output">outdiv1</div>
请帮助。
答案 0 :(得分:1)
你应该这样做:
$('[name="divname"]').click( function (){
var divnum = $(this).attr('id');
var out={div1:'first div clicked',div2:'second div clicked'}
$('#output').html(out[divnum]);
});
那是因为如果你说......
var divout = 'out' + divnum;
... divout
是一个字符串。
但是您想要访问名称为divout
包含的字符串的变量。
所以最简单的方法是创建一个对象,因为你可以像这样访问它的属性:
所以
如果您知道该物业的名称:
obj.property
或obj['property']
如果你不知道它的名字,但你有一个包含它的变量myvar
:
obj[myvar]
(myvar = 'property'
)
修改强>: 无论如何,在那种情况下我会用它:
$('[name="divname"]').click( function (){
var divnum = $(this).attr('id');
$('#output').html((divnum=='div1'?'first':'second')+' div clicked');
});
它会检查divnum
是否为'div1'
,如果是,则结果为'first div clicked'
。如果没有,'second div clicked'
。
这样您就不需要任何对象,只需要条件。
答案 1 :(得分:0)
你不会得到像这样的好的命名变量。如果您的变量具有非常相似的名称(var1
,var2
,var3
,...),您应该使用对象或数组来存储它们。
在这种情况下,尝试使用对象在名称和值之间创建映射:
var outdivs = {
'div1': 'first div clicked',
'div2': 'second div clicked'
};
$('[name="divname"]').click(function() {
var divnum = $(this).attr('id');
$('#output').text(outdivs[divnum]);
});