1

的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>


请帮忙。

4

2 回答 2

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包含的字符串的变量。所以最简单的方法是创建一个对象,因为你可以像这样访问它的属性:

  1. 对象属性
  2. obj['属性']

所以

  • 如果您知道房产名称:

    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'.

这样你就不需要任何对象,只需要一个条件。

于 2012-08-05T22:33:38.547 回答
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]);
});
于 2012-08-05T22:33:28.667 回答