我正在尝试构建一个
jquery内容可编辑代码,其中用户在鼠标悬停时识别可编辑div,一旦点击该div,内容就变得可编辑,并弹出按钮以选择编辑类型.现在,当我单击按钮时,弹出文本编辑器并格式化文本,一旦我单击按钮,光标或指针就会从可编辑的div中出来.我正在使用jquery来使内容可编辑
这是我的代码.
$(function() { var mouseX; var mouseY; var modal = false; $(document).mousemove(function(f) { mouseX = f.pageX; mouseY = f.pageY; }); var openPopup = function(e) { //Function to open popup $(e).fadeIn(400); $('#mask,[data-nitstextpopup]').fadeIn(400).css({ 'top': mouseY,'left': mouseX }).draggable(); $('#mask').css({ 'top': 0,'left': 0 }); $('[data-nitstextbutton]').hide(); }; var closePopup = function() { // Function to close the popup $('#mask,[data-nitstextpopup]').fadeOut(400); $('[data-nitstextbutton]').show(); }; $('[data-nitspagelabel]').hover(function() { $(this).css('border','solid 1px #777'); },function() { $(this).css('border','none'); }); $('[data-nitspagelabel]').click(function() { $(this).attr('contenteditable','true'); var labeltype = $('[data-nitspagelabel]').data("nitslabeltype"); if (labeltype == "text") { if (modal == false) { modal = true; $('[data-nitstextbutton]').css({ 'top': mouseY,'left': mouseX }).fadeIn(400).click(function(e) { e.preventDefault(); var popupBox = $(this).attr('href'); openPopup(popupBox); }); } } }); $('#mask').on('click',function(e) { e.stopPropagation(); closePopup(); modal = false; $('[data-nitstextbutton]').hide(); }); $(document).keyup(function(e) { if (e.keyCode == 27) { closePopup(); modal = false; $('[data-nitstextbutton]').hide(); } }); });
#mask { display: none; background: #9ACD32; position: fixed; left: 0; top: 0; z-index: 88888; width: 100%; height: 100%; opacity: 0.2 } [data-nitstextpopup] { display: none; background: #e2e2e2; padding: 0px; float: left; font-size: 1.2em; position: fixed; width: 250px; z-index: 99999; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://code.jquery.com/ui/1.12.0-rc.1/jquery-ui.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <body> <div id="mask"></div> <div> <h3>this is new html document generated by newject extention</h3> </div> <div class="clearfix" data-nitstextbutton style="display: none;"> <a href="#nitstexteditor" class="btn btn-circle btn-sm default"> Edit <i class="fa fa-pencil"></i> </a> <a href="#" class="btn btn-icon-only btn-circle default"> <i class="fa fa-circle-o-notch"></i> </a> </div> <div id="editable" style="top: 50%; left: 50%" data-nitspagelabel="1" data-nitslabeltype="text"> <h3>This is the content editable where I can change fonts and edit text</h3> </div> <div id="nitstexteditor" style="display: none;" data-nitstextpopup="0" data-nitseditor="1"> <div class="portlet Box blue"> <div class="portlet-title"> <div class="caption"> <i class="fa fa-pencil-square-o"></i> Text Editor </div> <div class="tools"> <a href="" class="remove"> </a> </div> </div> <div class="portlet-body form"> <form role="form"> <div class="form-body"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon input-circle-left"> <i class="fa fa-magic"></i> </span> <input type="text" class="form-control input-circle-right" placeholder="Select style"> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon input-circle-left"> <i class="fa fa-font"></i> </span> <input type="text" class="form-control input-circle-right" placeholder="Select font"> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon input-circle-left"> <i class="fa fa-font"></i> </span> <input type="text" class="form-control input-circle-right" placeholder="Select Size"> </div> </div> <div class="form-group"> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-bold"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-italic"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-underline"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-align-justify"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-align-left"></i> </a> </div> <div class="form-group"> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-align-right"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-undo"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-repeat"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-link"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-chain-broken"></i> </a> </div> </div> </form> </div> </div> </div>
我稍后会将凭据设置为格式化文本.提前致谢!
解决方法
我在特殊情况下使用了停止传播,它起作用!!!!
刚使用下面的代码:
stopPropagation();
完整代码如下:
var key; var edittag; function nitspopupeditor(key,edittag) { //Function to format editable items. if (edittag) { document.execCommand(edittag,false,null); $('key').focus(); } }; function closep() { // Function to close the popup on close button. $('[data-nitstextpopup]').fadeOut(400); $('[data-nitstextbutton]').show(); } $(function() { var mouseX; var mouseY; var modal = false; $(document).mousemove(function(f) { mouseX = f.pageX; mouseY = f.pageY; }); var openPopup = function(e) { //Function to open popup $(e).fadeIn(400); $('[data-nitstextpopup]').fadeIn(400).css({ 'top': mouseY,'left': mouseX }).draggable(); $('[data-nitstextbutton]').hide(); }; var closePopup = function() { // Function to close the popup $('[data-nitstextpopup]').fadeOut(400); $('[data-nitstextbutton]').show(); }; $('[data-nitspagelabel]').hover(function() { // to hover only editable items $(this).css('border','none'); }); $('[data-nitspagelabel]').click(function() { //click function on editable div to get editable buttons var $this = $(this); key = $this.attr('[data-nitspagelabel]'); $(this).attr('contenteditable','true'); var labeltype = $('[data-nitspagelabel]').data("nitslabeltype"); if (labeltype == "text") { if (modal == false) { modal = true; $('[data-nitstextbutton]').css({ //popup text editing buttons 'top': mouseY,'left': mouseX }).fadeIn(400).click(function(e) { e.preventDefault(); $this.focus(function() { var $this = $(this); $this.data('enter',$this.html()); $this.data('before',$this.html()); return $this; }).on('keyup paste',function() { // any key pressed or paste is used var $this = $(this); var text = $this.html(); if ($this.data('before') != text) { $this.data('before',text); var data = {}; data[key] = text; } return $this; }).on('blur',function() { // Clicking outside send the data to save var $this = $(this); var text = $this.html(); if ($this.data('enter') !== text) { $this.data('enter',text); var data = {}; data[key] = text; } return $this; }); var popupBox = $(this).attr('href'); openPopup(popupBox); // opens the editing tools popup edittag = $('[data-nitsedittag]').data("nitsedittag"); nitspopupeditor(key,edittag); // formatting buttons }); } } }); $(document).click(function(e) { // clicking outside closing the popup closePopup(); modal = false; $('[data-nitstextbutton]').hide(); }); $('[data-nitstextpopup]').click(function(e) { // setting execption areas for closing popup e.stopPropagation(); }); $("#btnedit").click(function(e) { // setting execption areas for closing popup e.stopPropagation(); }); $("#editable").click(function(e) { // setting execption areas for closing popup e.stopPropagation(); }); $(document).keyup(function(e) { // setting esc button close popup if (e.keyCode == 27) { closePopup(); modal = false; $('[data-nitstextbutton]').hide(); } }); });
<body> <div contenteditable="true"> <h3>this is new html document generated by newject extention</h3> </div> <div id="btnedit" class="clearfix" data-nitstextbutton style="display: none;"> <a href="#nitstexteditor" class="btn btn-circle btn-sm default"> Edit <i class="fa fa-pencil"></i> </a> <a href="#" class="btn btn-icon-only btn-circle default"> <i class="fa fa-circle-o-notch"></i> </a> </div> <div id="editable" style="top: 50%; left: 50%" data-nitspagelabel="1" data-nitslabeltype="text"> <h3>This is the content editable where I can change fonts and edit text</h3></div> <div id="nitstexteditor" style="display: none;" data-nitstextpopup="0" data-nitseditor="1"> <div class="portlet Box blue"> <div id="test" class="portlet-title"> <div class="caption"> <i class="fa fa-pencil-square-o"></i> Text Editor </div> <div class="tools"> <a onclick="closep()" class="remove"> </a> </div> </div> <div class="portlet-body form"> <form name="texteditorform" role="form"> <div class="form-body"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon input-circle-left"> <i class="fa fa-magic"></i> </span> <input type="text" class="form-control input-circle-right" placeholder="Select style"> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon input-circle-left"> <i class="fa fa-font"></i> </span> <input type="text" class="form-control input-circle-right" placeholder="Select font"> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon input-circle-left"> <i class="fa fa-font"></i> </span> <input type="text" class="form-control input-circle-right" placeholder="Select Size"> </div> </div> <div class="form-group"> <a class="btn btn-icon-only default" onclick="nitspopupeditor()" data-nitsedittag="bold"> <i class="fa fa-bold"></i> </a> <a class="btn btn-icon-only default" data-nitsedittag="italic"> <i class="fa fa-italic"></i> </a> <a href="javascript:;" class="btn btn-icon-only default" data-nitsedittag="underline"> <i class="fa fa-underline"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-align-justify"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-align-left"></i> </a> </div> <div class="form-group"> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-align-right"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-undo"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-repeat"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-link"></i> </a> <a href="javascript:;" class="btn btn-icon-only default"> <i class="fa fa-chain-broken"></i> </a> </div> </div> </form> </div> </div> </div> </body>
[data-nitstextpopup] { display: none; background: #e2e2e2; padding: 0px; float: left; font-size: 1.2em; position: fixed; width: 250px; z-index: 99999; }