我有一个编辑器,用户可以编辑和粘贴文本,更改会通过AJAX自动保存在服务器中。
通过JS我监视textarea的状态,如下所示:
$("#editor-area").bind "input propertychange", ->
content = $("#editor-area").val()
updateRequest = $.ajax(
url: url
data:
texto:
contenido: content
type: "PUT"
)
我从here中提取,由Emma Li回答。
当我写一个字符时,控制台在执行和处理一个调用时会显示相同的信息,但很多次。它们太多了,我的控制台溢出并开始覆盖过去的调用,执行完全相同的操作:使用新文本更新记录。
控制器中的更新方法类似于
def update
respond_to do |format|
if @text.update(text_params)
format.html {
redirect_to user_text_path(current_user, @text)
}
format.json { render :json => @texto }
else
format.html { redirect_to edit_user_path(@user, @text) }
end
end
end
该选项还有before_filter
def set_text_and_user
@text = get_stuff_from_Db
@user = @text.user
end
我一直试图调试这个东西,但到目前为止它已经打败了我。知道可能导致这种情况的原因吗?
答案 0 :(得分:0)
我实际上认为,接受的答案更好。
我从未使用过propertychange事件,快速的Google搜索显示 - 这可能不是100%正确 - 它实际上是IE特定的事件。我不确定其他浏览器是如何(以及如果)支持的。我认为你只需要在textarea上监听keyup事件。
无论如何,至于你的问题。你可以采用不同的方式。他们都归结为使用计时器。你很可能不希望将每一个按键发送到你的后端,因为几个并发用户只会杀死它。
最常见的方法可能是限制。最简单的是,它捕获事件的函数检查自上一个事件以来的时间差,并且如果已经过了足够的时间则仅调用处理程序 。你可以谷歌搜索细节,我很确定有jQuery插件。