小编Lev*_*Lev的帖子

防止CKEditor在源模式下格式化代码

在源模式下查看时,如何在CKEditor中阻止任何自动格式化?

我喜欢直接编辑HTML源代码而不是使用WYSIWYG接口,但每当我编写新行或布局标签时我会如何缩进它们,当我切换到WYSIWYG模式然后再次返回源模式时,它都会被格式化.

我偶然发现了一张CKEditor开发票,保留了ProtectedSource元素的格式,这提到了一个曾经存在过一次的设置,这正是我所追求的.我只想知道在源模式下编辑时如何完全关闭所有自动格式化.

我提出了一个我认为万无一失的解决方案(虽然不是一个令人愉快的解决方案).

我了解了protectedSource设置,所以我想,也许我可以使用它并在我的所有HTML之前创建一个HTML注释标记,然后在它之后创建一个HTML注释标记然后推送一个正则表达式,将注释标记添加到protectedSource数组中,但即便如此(相信它或不)工作不起作用.

我已经在CKEditor之外的浏览器中直接尝试了我的表达并且它正在工作,但是CKEditor没有按预期保护代码(我怀疑这是一个涉及注释标记的错误,因为我可以让它与其他字符串一起使用).万一你想知道,这是我希望可以解决的问题,但不是:

config.protectedSource.push( /<!-- src -->[\s\S]*<!-- end src-->/gi );
Run Code Online (Sandbox Code Playgroud)

而我计划做的事情(因为似乎缺少一种在源模式下禁用格式化的设置)是将我的所有HTML嵌套在注释标签中,如下所示:

<!-- src -->
<div>some code that shouldn't be messed with (but is)</div>
<!-- end src -->
Run Code Online (Sandbox Code Playgroud)

我很想知道是否有人对这种情况有任何建议,或者知道我所描述的设置,或者即使有人可以告诉我为什么我无法protectedSource使用两个评论标签正常工作.

我真的认为它必须是一个bug,因为我可以让很多其他表达式工作正常,我甚至可以在单个注释标记区域内保护HTML,但我无法在两个不同的注释标记中获取HTML以保持不变.

html formatting wysiwyg ckeditor

20
推荐指数
3
解决办法
2万
查看次数

在jQuery的可排序列表中排除一个或多个元素(使用connectWith)

我有两个列表,一个ID为"vlist",另一个ID为"hlist"."vlist"包含应该可见的元素,而"hlist"包含应该保持隐藏的项目.这里的想法是允许系统管理员指定应该在注册页面上显示哪些元素/字段,哪些不应该.这两个列表使用"connectWith"连接,因此管理员可以将项目从可见列表拖动到隐藏列表(反之亦然).

我的困境是我想要锁定到可见列表中的一些字段,但仍然可以在该列表中排序.例如,"用户名","电子邮件"和"密码"字段应锁定在可见列表中(因为它们始终需要用于注册).

这甚至可能吗?也许我还没有发现它是一个明智的选择.我已经浏览了jQuery的文档一段时间,似乎无法找到与此场景相关的任何内容.我已经找到了如何"取消"列表中的特定元素完全可以排序,甚至禁止成为可丢弃的目标,但这不能做到.用户仍应能够在"可见"列表中拖动这些项目,以防他们想要调整锁定字段的顺序.我也知道你可以在特定元素或DOM对象中包含可排序元素,但这也不能使用,因为这似乎只适用于整个可排序列表,而不适用于该列表的特定元素.

在构建可排序列表之后,我甚至试图看看这样的东西是否会起作用:

$('#vlist > #slist-li-username').sortable('option', 'containment', '#vlist');
Run Code Online (Sandbox Code Playgroud)

显然,这也没有用,或者我不会发布这个.

如果它可能有所帮助,我想我会抛出我现在使用的代码; 这是jQuery代码:

$(function()
{
$('#vlist, #hlist').sortable
    ({
    connectWith: '.signup-set_flist',
    forcePlaceholderSize: true,
    receive: function (event, ui)
        {
        var itemID = ui.item.attr('id');
        var fID = itemID.replace(/slist-li-/g, '');
        var hID = 'slist-' + fID;
        if (ui.sender.attr('id') == 'vlist')
            {
            $('#'+hID).val('');
            }
        else
            {
            $('#'+hID).val(fID);
            }
        }
    }).disableSelection();
    $('#vlist > #slist-li-username').sortable('option', 'containment', '#vlist');
});
Run Code Online (Sandbox Code Playgroud)

至于HTML,我会将它上传到这里(因为当我将它粘贴到这里时,StackOverflow似乎会中断 - 即使在代码模式下):

http://sikosoft.net/jquery-sort-connect.html

jquery jquery-ui jquery-ui-sortable

1
推荐指数
1
解决办法
2489
查看次数

当keyup事件(对于另一个键)被触发时,keydown(重复)会中断

这有点奇怪,所以我想我要么缺少一些明显的东西,要么就是这些事件在浏览器中实现的缺陷.

让我首先总结一个示例场景,在提供一个孤立的案例之前,这个问题就出现了;

箭头键用于移动播放器(因为只要在页面的任何位置按键,就会触发handleKeyDown函数).同样,只要释放一个键,就会触发另一个函数(handleKeyUp).

当你(玩家)按住左键时,handleKeyDown函数会被重复触发(我认为我认为这会违背你的期望和名称所暗示的内容,但是,尽管如此,这是所有浏览器的正常行为,因为我确定你懂).

所以这就是发生的事情:玩家有朝这个方向行走的方向; 然后他们按下一个数字键(对于热键项目),他们继续走路,同时按住方向.这里发生的是当您释放热键项目的数字键时,玩家移动的重复就会停止!

我写了一个非常小的这种行为的例子:

<html>
<head>
    <script type='text/javascript' src='jquery-1.5.1.min.js'></script>
    <script type='text/javascript'>
        var log = {};
        var keyState = {};
        var keyCount = {'down': 0, 'up': 0};
        window.addEventListener('keydown', handleKeyDown, false);
        window.addEventListener('keyup', handleKeyUp, false);
        function handleKeyDown (e)
            {
            keyState[e.keyCode] = true;
            keyCount.down++;
            log.prepend(" ["+e.keyCode+"] ");
            return false;
            }
        function handleKeyUp (e)
            {
            keyState[e.keyCode] = false;
            keyCount.down++;
            return true;
            }
        $(function(){log = $('#log');});
    </script>
</head>
<body>
    <div id='debug'></div>
    <div id='log'></div>
</body>
Run Code Online (Sandbox Code Playgroud)

你也可以在这里试试:

http://sikosoft.net/keys.html

按页面上的任意键,您将看到页面上出现keyCode.按住键时,键码会一遍又一遍地重复.

当初始键仍然被按住时,按下另一个键时,该行为变得古怪.在释放该最近的密钥时,重复从第一个密钥停止.有趣的是,如果您尝试该示例并按住一个键,然后按住第二个键,但不是释放第二个键,而是释放第一个键:第二个键继续重复.

所以似乎继续发生的是,当keyup事件被触发时,它似乎终止了在早期键上触发的keydown事件中的重复.

我尝试了各种各样的事情,包括在事件处理函数中使用返回false,返回true,尝试按键而不是keydown,保存键状态并在按钮的keystate仍然为true时继续移动,但是这一切都归结为为什么当键盘被触发时,任何主动传播的keydown事件都被杀死.我读过JavaScript疯狂:键盘事件,我没有看到任何关于这种特定行为的内容.

这是关键事件实施的设计缺陷,还是我遗漏了什么?我在Chrome,IE和Firefox中观察到了同样的行为. …

javascript events keypress keydown onkeyup

1
推荐指数
1
解决办法
3313
查看次数