【问题标题】:I'm having an issue with jQuery variables我遇到了 jQuery 变量的问题
【发布时间】:2012-02-14 13:17:07
【问题描述】:

我有一系列列表项,其中包含用于存储信息的数据属性,例如:


  • ...
  • 我正在使用该信息来填充使用 jQuery 注入的弹出框,并且我需要将信息存储到与每个列表项对应的变量中。我正在使用.click() 将弹出框附加到列表项,然后将其淡入。但是当我尝试在函数中包含变量以限制其范围时,我的代码停止正常工作。这是我所拥有的一个粗略示例:

    var person = $('#list li');
    
    person.click( function() {
        var name = $(this).attr('data-name'),
            age = $(this).attr('data-age'),
            gender = $(this).attr('data-gender');
    
        $(this).children('div.foo').fadeIn();
    })
        .append(
            '<div class="foo">
                 <dl>
                     <dt>Name:</dt>
                     <dd>' + name + '</dd>
                     <dt>Age:</dt>
                     <dd>' + age + '</dd>
                     <dt>Gender:</dt>
                     <dd>' + gender + '</dd>
                 </dl>
             </div>'
        );

    关于为什么这不能像我想要的那样工作的任何想法?

    【问题讨论】:

      标签: jquery custom-data-attribute


      【解决方案1】:

      变量name, age and gender 仅在click 函数的范围内可见,因此您不能在其下方的附加块中使用它们。

      var person = $('#list li');
      
      person.click( function() {
          var name = $(this).attr('data-name'),
              age = $(this).attr('data-age'),
              gender = $(this).attr('data-gender');
          $(this).append( '<div class="foo">
                   <dl>
                       <dt>Name:</dt>
                       <dd>' + name + '</dd>
                       <dt>Age:</dt>
                       <dd>' + age + '</dd>
                       <dt>Gender:</dt>
                       <dd>' + gender + '</dd>
                   </dl>
               </div>');
           $(this).children('div.foo').fadeIn();
      });
      

      【讨论】:

      • 有趣。使用您的代码,我可以让它工作,但只有当我单击列表项两次时,因为我的第一次单击什么也不做。
      • 我编辑了答案并将fadeIn() 放在append 之后,这有帮助吗?
      • 修复了它,但现在它丢弃了我在弹出窗口中的其他功能,例如关闭按钮。
      • 很难知道这段代码如何影响您的其余功能。您能否发布更多代码,或创建一个jsfiddle
      • 不幸的是我不能发布我正在做的事情;保密性和所有这些(因此我使用了通用代码)。基本上,问题在于将 append 方法粘贴在 click 函数中意味着在页面加载时看不到它,因此我拥有的一大堆使用附加标记的其他东西不起作用。
      【解决方案2】:

      您遇到了范围问题。在单击 li 之前不会创建变量,但您的 append 不在单击范围内。

      另外,使用.data 代替attr

      【讨论】:

      • 为什么我应该使用 data 方法而不是 attr?
      • data 将处理这些属性以及使用data 设置的任何内容,如果您将来最终使用它。在代码中似乎也更具可读性。
      • 那么我的用法会不会一样,只是将 'attr' 替换为 'data'?
      猜你喜欢
      • 2019-02-15
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多