【发布时间】:2017-07-17 14:56:16
【问题描述】:
我的应用程序允许用户创建和编辑面试问题。
最初,用户会看到一组“标准”问题,每个问题都显示在自己的文本区域中。
允许用户在这些文本区域中编辑/自定义这些“入门”问题。
如果问题被更改(以有意义的方式),该问题将被保存为一个新问题。
但是,无意义的更改不应触发添加“已编辑”类。
我的挑战是我想检测 textarea 何时发生更改,但我不想计算添加的空格或只是单击 textarea 作为值得更新数据库的编辑。
我的文本区域是这样的:
<textarea id="question_1" class="textarea_enabled">{text filled from database}</textarea>
当我的 jquery/javascript 是这样的时候:
$(document).on('keypress','.textarea_enabled',function() {
var charCount = $(this).val().replace(/\s/g,'').length;
if(newChar > 1) {
$(this).addClass('edited');
}
});
它不起作用,因为长度包括测量数据库中已经存在的文本。
例如,如果问题已经是 30 个字符,那么上面的代码会在第一次击键时添加类,因为它已经大于 1。
或者,我尝试过:
$(document).on('input blur','.textarea_enabled',function() {
$(this).addClass('edited);
});
但是,当然,没有计算或评估此代码中发生了多少变化。因此,用鼠标点击输入,然后在文本区域外点击就足以触发添加“已编辑”类。
确切地说,我不是在寻找 textarea 中的字符总数(正如许多其他 SO 问题所解决的那样),我也不是试图限制 textarea 中的字符数。
我需要一个检测有意义的编辑的函数。现有问题字符串中的编辑(例如,更正拼写或删除单词)应始终触发“已编辑”类添加。另一方面,“增量”非空格或其他非可视按键、点击进出字段等不应触发添加“已编辑”类。
例如,在问题末尾输入的空格将是无意义的空格。但是,在现有问题的“内部”中输入一个空格来分隔先前输入错误的单词(例如,“thedog”更改为“the dog”)将是一个“有意义的”更改。
我可以将提交的编辑与 SQLite 数据库中存储的值进行比较,但这似乎是一种“昂贵”的方法,并且在更改足以被识别时消除了视觉提示用户的机会(即添加“编辑”类)。
实现这一目标的最佳方法是什么?
【问题讨论】:
-
您是否有一个编辑和保存按钮来更改文本区域数据,或者只是单击并悬停保存数据?
-
多个问题同时显示。添加“edited”类用于标记那些应该包含在 Post 数据中并在服务器上处理的类。只需单击文本区域即可编辑文本区域
-
为什么不只检查 keypress 以了解按下的键的类型。如果它不是空间或元或 ctl 等...然后保存?
-
我认为这行不通。例如,在问题末尾输入的空格将是无意义的空格。在现有问题的“内部”中输入空格以分隔先前输入错误的单词(例如,“thedog”更改为“the dog”)将是一个“有意义的”更改。
-
嘿@globalSchmidt,我只是好奇你是否希望用户:(1)评估他/她所做的是否“有意义”; (2) 让他们决定是否要从他们编辑的内容中创建一个新问题? (即他们可以按下的按钮)
标签: javascript jquery html sqlite