Jquery |变量值作为字符串而不是调用另一个变量

时间:2012-08-05 22:26:48

标签: jquery string variables

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>


请帮助。

2 个答案:

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

  1. obj.property
  2. OBJ [ '属性']
  3. 所以

    • 如果您知道该物业的名称:

      obj.propertyobj['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)

你不会得到像这样的好的命名变量。如果您的变量具有非常相似的名称(var1var2var3,...),您应该使用对象或数组来存储它们。

在这种情况下,尝试使用对象在名称和值之间创建映射:

var outdivs = {
  'div1': 'first div clicked',
  'div2': 'second div clicked'
};

$('[name="divname"]').click(function() {
   var divnum = $(this).attr('id');

   $('#output').text(outdivs[divnum]);
});