在内部单击三元组设置值
Click inside click triples setting value
我有评论系统,用户在每个评论上都有回复按钮。回复单击后,他获得了带有文本区域的新表单。在文本区域中,我有斯迈尔斯。用户单击"微笑"后,Smyle 代码将插入光标聚焦的文本区域中。
问题是,当我切换 Smyles 按钮并再次显示时,微笑插入了 tripple 时间。
我把JSFIDDLE的基本例子装箱了。
- 点击文本区域中的"显示里程"链接
- 点击微笑。
- 切换"显示微笑"
- 再次点击微笑(这里微笑现在是跛子)
法典:
$(document).on('click','.showsmiles',function(){
var $smiles = $(this).next();
$smiles.toggleClass('displaysmiles');
$smiles.click('a',function(e){
e.preventDefault();
var $that = $(this);
var txtarea = $that.closest('.cont').find('textarea');
var caretPos = txtarea[0].selectionStart;
var textAreaTxt = txtarea.val();
var txtToAdd = ' :'+$that.data('alt')+': ';
txtarea.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
});
});
更新:以便它处理多个实例
您的代码存在一些问题,特别是围绕选择器以及如何将点击处理程序应用于导致问题的问题。
通过处理其微笑列表的显示和隐藏,您的首次点击事件可以变得更简单:
$('.showsmiles').on('click', function(e){
e.preventDefault();
$(this).next().toggleClass('displaysmiles');
});
其次,您还可以专门定位微笑链接,为它们提供处理程序,每次点击只会运行一次:
$('.smiles a').on('click', function(e) {
e.preventDefault();
var $that = $(this);
var txtarea = $that.closest('.cont').find('textarea');
var caretPos = txtarea[0].selectionStart;
var textAreaTxt = txtarea.val();
var txtToAdd = ' :'+$that.data('alt')+': ';
txtarea.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
});
工作小提琴演示两个实例一起演奏:
https://jsfiddle.net/s20L85wy/
问题是您在每次单击按钮以切换可见性时都为每个标签设置了单击方法。拆分可以解决问题:
https://jsfiddle.net/n60otLw6/3/
$(document).on('click','.showsmiles',function(){
var $smiles = $(this).next();
$smiles.toggleClass('displaysmiles');
});
$('.cont').click(function(){
var cont = $(this);
var mes = $(this).find('textarea').val();
cont.find('.appendsmile').bind("click", function(){
cont.find('textarea').val(mes + " :" + $(this).attr('data-alt') + ": ")
});
})
这适用于多个实例,在我看来,代码更干净一些。
相关文章:
- 将字符串的一部分设置为数组的一部分
- 从数组中删除三元组项
- 如何在不使用jQuery的情况下设置数组以获取单选按钮值
- 使用第 n 个类型设置一组八个元素的样式
- JavaScript-设置数组中包含变量的数组
- 用户输入设置数组长度
- jQuery/JavaScript按属性设置数组
- 未捕获的类型错误:将 innerhtml 设置为数组中的字符串时,无法设置 null 的属性 'innerHTM
- 在 JavaScript 中获取和设置数组内对象的值
- 在内部单击三元组设置值
- 无法设置数组中日期的格式
- 注册客户端脚本不适用于设置数组值
- 不能使用 Angular.js 或 Javascript 将表中的行值设置为数组
- 根据特定日期设置数组
- Javascript:尝试将函数设置为数组中对象的成员
- IMacros 检查和设置数组元素
- 是否有一个 JavaScript 或 Lodash 函数可以轻松迭代成对或三元组
- 访问对象并将其设置为数组的空抛出元素
- 通过索引设置数组对象的值会设置所有数组项
- 如何使用jQuery/javascript在下拉列表(多选)中设置数组对象的值