0

这是视图调用的部分:

<li>
  <span class="content"><%= link_to "#{key.name} (#{key.description})", key %> (<%= key.id %>)</span>
  <span class="timestamp">
    Created <%= time_ago_in_words(key.created_at) %> ago.
  </span>
  <span class="content">
  <% if key.chords.count > 0 %>
    <%= link_to "show chords", '#', class: "showremovechords" %>
    <span> // </span>
  <% end %>
      <%= link_to "remove", key, method: :delete %>     
  </span>
  <div class="chordsholder">
    <ol class="chords">
    <% if key.chords.count > 0 %>
      <ol class="microposts">
        <%= render key.chords %>
      </ol>
    <% end %>
    </ol>
    </div>
</li>

这是 jQuery(使用 CoffeeScript)在单击“显示和弦”按钮时切换是否显示 div class='chordsholder'。

jQuery ->
  toggleChords = (e) ->
    e.preventDefault()
    if $(@).text('show chords')
        $(@).text('hide chords')
    else
        $(@).text('show chords')
    $(@).closest('li').find('.chordsholder').slideToggle()

  $('.showremovechords').click toggleChords

div 开始隐藏,链接以文本“显示和弦”开头

div 可见性的切换有效,第一次单击时文本变为“隐藏和弦”,但语句的 ELSE 部分不起作用,因此当 div 为“显示和弦”时,文本不会变回隐。任何想法为什么会发生这种情况?谢谢

4

1 回答 1

2

在您的代码中:

if $(@).text('show chords')

设置值,表达式的返回值始终为。所以你的 else 永远不会执行。jqobject.text(something)是二传手。相反,您可能想要比较该值。所以这里发生的是,由于您的 if 条件中的设置器,它会将值设置为“显示绳索”,然后返回真实的 jquery 对象,因此它会转到您的 if块,然后将其设置为“隐藏线”。

尝试

if $(@).text() === 'show chords'
        $(@).text('hide chords')
else
    $(@).text('show chords');

您也可以使用文本的 fn 参数语法来执行此操作(但不确定咖啡语法)。

$(@).text(function(_, curValue){
   return curValue === 'show chords' ? 'hide chords' : 'show chords';
})
于 2013-09-14T19:11:39.957 回答