【问题标题】:convert string to variable in jquery在jQuery中将字符串转换为变量
【发布时间】:2021-08-13 07:38:18
【问题描述】:

我想设置一些变量,从 5 个选择元素的值中获取它们,多选 ID 与脚本中的变量名称具有相同的名称......

内部 HTML 部分:

  <select id="variable1">
    <option value="10">10</option>
    <option value="20">20</option>
    <option value="50">50</option>
  </select>

  <select id="variable2">
    <option value="algo1">algo1</option>
    <option value="algo2">algo2</option>
    <option value="algo3">algo3</option>
  </select>

  <!-- etc -->

在 jQuery 脚本中:

  var variable1;
  var variable2;
  var variable3;
  var variable4;
  var variable5;
  $("#variable1, #variable2, #variable3, #variable4, #variable5").change(function(){
    var valorAcambiar = $(this).attr('id');
    valorAcambiar = $(this).val();
  });

所以我正在尝试这个,但不起作用...我认为问题在于脚本没有运行从选择元素的 ID attr 中选择的字符串值作为脚本的变量名,一些可以帮帮我吗?

我的意思是,我希望“valorAcambiar”采用 variable1 的名称(来自 select 元素的 id attr)或任何其他名称,以更改脚本中的全局 variable1(或任何其他)值。

因此,如果有人更改 variable1 选择,我可以获得 variable1 = 20,或者如果有人更改 variable2 选择,我可以获得 variable2 = algo3,这适用于 5 个多选元素。

谢谢。

【问题讨论】:

  • 我误解了你想要做什么;我已经添加了答案。

标签: jquery string variables


【解决方案1】:

您尝试做的事情的一个常见术语是变量变量,或动态变量As this question says:

几乎总有比使用可变变量更好的解决方案!相反,您应该查看数据结构并为您的问题选择合适的。

您可以轻松地将数据存储在对象中,如下所示:

// Master object to store all your variables
var variables = {};

$("#variable1, #variable2, ...").change(function() {
    var id = $(this).attr('id'),
        val = $(this).val();
    
    // Store results in your master object
    variables[id]=val;
    
    // See what it looks like
    console.dir(variables);

    // See what it looks like
    alert('variable1 is ' + variables['variable1'] + ', variable2 is ' + variables['variable2']);
});

Working JSFiddle.

【讨论】:

  • 非常感谢!在搜索此解决方案时,我曾看到其他一些网站谈论动态或可变变量,但是直到看到此示例,我才完全理解这一点……这就是原因,因为我总是问,即使知道那里是否有其他线程在谈论这个问题,我认为不同的答案示例可能会很有帮助,而且您永远不知道确切的答案会让您理解...非常感谢!我很高兴,因为版主没有关闭这个帖子,我希望这可以帮助其他像我一样的人!
  • @trying2code 很高兴为您提供帮助。 Please also upvote if this (or any) answer helped,谢谢!
  • 我需要15点声望!不过我拿到了还会再来的!
【解决方案2】:

试试这样的。

function mySelector(selector) {
    return $.extend($(selector),{"selector":selector});
}

$("#" + variable1).change(function(){
    var valorAcambiar = $(this).attr('id');
    valorAcambiar = mySelector($(this));
    // Get and split with # and then evaluate
    valorAcambiar = valorAcambiar.split('#');
    var value = eval(valorAcambiar[1]);
});

选择器是一个字符串。所以你可以在前面加上# 作为id,在前面加上. 作为class。

【讨论】:

    【解决方案3】:

    您必须将变量附加到全局窗口(不是最佳实践),并按如下方式访问它:

    window[$(this).attr('id')].

    variable1, variable2;
    
      $("#variable1, #variable2").change(function(){
          let attrId = $(this).attr('id');
          window[attrId] = $(this).val();
          
          if(attrId === 'variable1'){
            console.log(variable1)
          }
          if(attrId === 'variable2'){
            console.log(variable2)
          }
      });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <select name="" id="variable1">
        <option value="var1 option1">option 1</option>
        <option value="var1 option2">option 2</option>
        <option value="var1 option3">option 3</option>
    </select>
    <select name="" id="variable2">
        <option value="var2 option1">option 1</option>
        <option value="var2 option1">option 2</option>
        <option value="var2 option1">option 3</option>
    </select>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 2011-08-27
      相关资源
      最近更新 更多