这似乎很简单,但可能我缺少一些东西。我尝试将每个项目的ondblclick事件绑定到列表中,并将其值传递给编辑器,以便单击该项目时,其文本会在编辑器中合并。由于某些原因,即使我单击第二个或第三个项目,也只有第一个项目会继续追加到编辑器文本中。
$('#listComments').each(function (index, item) {
$('#listComments')[0][i].ondblclick = function () {
alert(i);
var editor = $("#editor").data("kendoEditor");
editor.exec("inserthtml", { value: commentSet[i] });
};
commentsSet是另一个临时数组,其中填充了原始值,如下所示
var commentsSet = [];
$.ajax({
url: urlComments,
data: { headerId: $('#ddlCommentHeaders').val().toString() },
dataType: "json",
success: function (result) {
$('#listComments').empty();
commentSet = [];
$.each(result, function (index, value) {
commentSet[index] = value.comment;
$('#listComments').append($('<option>').text($(value.comment).text()).val(value.CommentID));
});
for (var i = 0; i < $('#listComments')[0].length; i++) {
$('#listComments')[0][i].ondblclick = function () {
alert(i);
var editor = $("#editor").data("kendoEditor");
editor.exec("inserthtml", { value: commentSet[i] });
};
}
}
});
基本上value.comment有一个带有html标记的文本,我需要在编辑器中显示,但要显示在列表项中,我只需要不带html标记的纯文本,所以我用html文本填充了一个临时数组,并用纯文本绑定了列表文字值。
ondblclick事件仅出现在列表的第一项中。
我希望我能解释我的问题。 :)
更新
在浏览器中输入$('#listComments')
[select#listComments.classComments,上下文:文档,选择器:
“ #listComments”] 0:select#listComments.classComments上下文:
文档长度:1个选择器:“#listComments”
原型:Object(0)
$('#listComments')。length为1
$('#listComments')[0]
<select class="classComments" id="listComments" multiple="multiple" name="cM.CommentsList" style="height:105px; margin-bottom:5px; max-width:100%;"><option value="1382" style="white-space: pre-wrap;">This is a Math Comment</option><option value="1383">This is a second Comment</option></select>
$('#listComments')[0] .length为2
的HTML
<div style="margin-left:5px; width:80%" class=" col-xs-9">
@Html.ListBoxFor(m => m.cM.CommentsList, new SelectList(Model.cM.CommentsList, "CommentID", "Comment"), new { @id = "listComments", @style = "height:105px; margin-bottom:5px; max-width:100%;", @class="classComments" })
</div>
jQuery的每个功能
$('#listComments').each(function (index, item) {
item.ondblclick = function () {
alert(index);
editor.exec("inserthtml", { value: commentSet[index] });
};
});
回答
尽管穆罕默德·优素福(Muhammad-Yousuf)都给出了正确的解决方案,但我只能将其中一个答案标记为正确。我还提到了this帖子。这样做是..并且感谢卢克的一贯支持。
$('#listComments').dblclick(function (){
$("#listComments option:selected").each(function () {
var index = $(this).index();
var editor = $("#editor").data("kendoEditor");
editor.exec("inserthtml", { value: commentSet[index] });
});
});
最佳答案
因此,我只是正确地阅读了您的代码,并注意到您正在尝试将双击事件关联到一个选择中的选项,我认为这不会按您期望的那样起作用。尝试遍历selects选项并将每个值设置为正确的索引,然后将onchange事件连接到commentList,在该事件中获取当前值(索引),并使用该值从数组中获取正确的项。
就像是
$('#listComments option').each(item, index) {
$(item).data('index', index);
}
$('#listComments')[0].dblclick = function() {
var index = $('#listComments option:selected').data('index');
alert(index);
var editor = $("#editor").data("kendoEditor");
editor.exec("inserthtml", { value: commentSet[index] });
}