Coffescript没有指出正确的元素

时间:2015-05-18 09:52:19

标签: javascript jquery coffeescript

嗨,我有一个像这样的coffeescript代码:

$(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 div的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>

3 个答案:

答案 0 :(得分:0)

根据你的HTML, .content_length位于.field_with_errors内,所以 我认为你必须首先得到父母,然后做下一个,如下所示:

$(document).on 'keyup', '.content_length', ->
  $(this).parent().next('.char_counter').text(255 - $(this).val().length);

答案 1 :(得分:-1)

Runnable object as a normal instance variable to class A.

答案 2 :(得分:-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类的其他成员,或者将其更改为ID并完成它:)