1

我将 CoffeeScript 用于 Rails 上的应用程序,现在在更改复选框后,我调用 jquery 函数以使用 ajax 更新其在数据库中的值,但如果选中了复选框,我还想插入一行。

HTML:

    <ul>
       <li class="side-bar-element">
           <input class="task" id="1" name="1" type="checkbox" value="Element 1"/>
           Element 1
       </li>
       <li class="side-bar-element">
           <input class="task" id="2" name="2" type="checkbox" value="Element 2"/>
           Element 2
       </li> 
       <li class="side-bar-element">
           <input class="task" id="3" name="3" type="checkbox" value="Element 3"/>
           Element 3
       </li> 
       <li class="side-bar-element">
           <input class="task" id="4" name="4" type="checkbox" value="Element 4"/>
           Element 4
       </li>  
    </ul>

咖啡脚本:

$(".task").live "change", ->
  id = $(this).attr("id")
  isChecked = $(this).attr("checked")
  $.ajax
    url: "/update"
    type: "post"
    data: { id }

    success: ->
      alert "Updated Succesfully."
      if(isChecked)
        alert "For Testing: Is Checked."
        $(this).closest('li').css "text-decoration", "line-through"

    error: ->
      alert "Changes were not saved."

我不明白为什么警报“已检查”工作正常,但它从不更新 CSS。我也尝试使用 parent(), prev() 但没有运气。任何帮助将非常感激。谢谢。

4

1 回答 1

3

this成功回调里面不是你想的那样。

所有回调中的 this 引用是设置中传递给 $.ajax 的 context 选项中的对象;如果未指定上下文,则这是对 Ajax 设置本身的引用。

采用

$.ajax
    context: this,
    url: "/update"
    type: "post"
    data: { id }
    //.....

$.ajax还有很多其他选项http://api.jquery.com/jQuery.ajax/

于 2013-03-15T17:15:26.337 回答