2015-05-18 48 views
0

您好我有一个的CoffeeScript代码:Coffescript犯规点正确的元素

$(document).on 'keyup', '.content_length', -> 
$(this).nextAll('div.char_counter:first').text(255 - $(this).val().length); 

这应该使这个代码,工作原理:

<div class="create_comment" > 
    <%= form_for(announcement.comments.create, url: announcement_comments_path(announcement.id)) do |form| %> 
    <%= form.label :author, "Autor:" %> 
    <%= form.text_field :author, class: "form-control" %> 

    <%= form.label :content, "Treść:" %> 
    <%= form.text_field :content, class: "form-control content_length" %> 
    <div class="char_counter">255</div> 
    <%= form.submit "Dodaj!", class: "btn btn-primary" %> 
    <% end %> 
</div> 

这是由创建的一部分循环。代码(this).nextAll工作得很好,但它改变了所有char_counter divs的walue。所以我的直觉告诉我,指向正确的div有什么问题。

编辑:

我想我知道问题出在哪里。 “this”指的是嵌套在div中的输入元素。我尝试选择一个div,它是兄弟的输入文件所在的div。

  <div class="create_comment" > 
        <form class="new_comment" .../> 
           <div class="field_with_errors"><label for="comment_author">Autor:</label></div> 
           <div class="field_with_errors"><input class="form-control" type="text" name="comment[author]" id="comment_author" /></div> 

           <div class="field_with_errors"><label for="comment_content">Treść:</label></div> 
           <div class="field_with_errors"><input class="form-control content_length" type="text" name="comment[content]" id="comment_content" /></div> 
           <div class="char_counter">255</div> 
           <input type="submit" name="commit" value="Dodaj!" class="btn btn-primary" /> 

</form>   </div> 

回答

0

根据你的HTML, .content_length里面.field_with_errors,所以 我认为你必须先得到家长,然后做下一个,像图所示:

$(document).on 'keyup', '.content_length', -> 
    $(this).parent().next('.char_counter').text(255 - $(this).val().length); 
-1
$(document).on 'keyup', '.content_length', -> 
    $(@).closest('div.char_counter:first').text(255 - $(@).val().length) 
    return 
+0

尝试,它状态并没有工作 – Kazik

-1

CoffeeScript的是空间敏感,缩进线$(this).nextAll('div.char_counter:first').text(255 - $(this).val().length)这样的:

$(document).on 'keyup', '.content_length', -> 
    $(this).find('div.char_counter:first').text(255 - $(this).val().length) 

或在线版本

$(document).on('keyup', '.content_length', -> $(this).find('div.char_counter:first').text(255 - $(this).val().length)) 

此外,在CS你不需要;后去声明并可能将nextAll()更改为find()closest()作为其他答案建议。

编辑:

更好的阅读后,你应该改变
$(this).nextAll('div.char_counter:first').text(255 - $(this).val().length)

到:

$('.char_counter').text(255 - $(this).val().length)

如果没有.char_counter类的其他成员,或改变它以身份证,并与它做:)

+0

缺少返回导致返回这个函数中的'$(this)'块,'this'在咖啡里是'@',... – Exinferis

+0

它只是在我看来,OP错过了缩进。在这种情况下返回或不返回,在我看来,是味道的问题(与'@'或'this'相同)。纠正我,如果我错了,但你的解决方案可以使用或不使用明确的'return',这是CS设计决定做隐式返回,在95%的情况下,这并不重要,因为大多数脚本函数是重要的,因为sideffects。 – Drops

+0

不添加空返回,从而避免隐式返回不仅是一个坏习惯,而且会导致严重的内存问题,在节点上,而且在浏览器中。 http://programmaticallyspeaking.com/why-i-hate-implicit-return-in-coffeescript.html – Exinferis