2

我在表单中的 textareas 上使用 jwysiwyg 插件(jwysiwyg:https ://github.com/akzhan/jwysiwyg )

我想检测我表单中任何文本区域的更改。

通常,使用标准的非所见即所得文本区域,我会:

$('textarea').change(function(e){
    alert('Something changed!');
 });

由于 jwysiwyg 的 DOM 操作,这在使用 jwysiwyg 时被证明是无效的。

有人有任何指示吗?

4

3 回答 3

4

使用此代码,我已经使用 help/example/01.basic.html 和 02.full.html 对其进行了测试,我想它也可以与其他代码一起使用:

$(document).ready(function(){
var current = $("#wysiwyg-wysiwyg-iframe").contents().find('html');

     function detectFn(){
          alert('Detected');
       } 

       var timer;

    current.bind({    
                keyup: function(){
                    clearTimeout(timer);
          timer = setTimeout(detectFn, 2000)

                }
    });

});

消息来源
Yasir Laghari 和 Ghommey 对这个解决方案有真正的功劳。

jQuery/JavaScript:访问 iframe 的内容

在按键上,当 X 秒后停止调用函数时

说明

1) 'jwysiwyg 插件' 它的作用是替换 iframe 的 textarea。文本位于“p”标签内,另一件要考虑的事情是该标签不能被点击,如果你点击文本,你实际点击的是“iframed html”标签。

2) 要让 jQuery 访问和选择 iframed 元素,必须使用 'contents()' 方法。这样我们就可以开始使用 iframe 触发一些功能。

3) 创建detectFn(),它将在检测到假文本区域中的更改后执行您要使用的代码。

4) 声明变量'timer'。

5) bind() 方法必须与“iframed html”标签一起使用才能使用 keyup 事件。这样就可以模拟文本区域的输入动作。

6)每个keyup都会多次执行detect函数,为了防止这种情况,我们使用setTimeout方法并将detectFn存储在变量'timer'中。最后,必须将变量作为参数传递给 clearTimeout,这样每次 keyup 都会取消之前执行的检测函数。

于 2012-01-28T09:04:52.680 回答
1

我发现这要简单得多:

    $('#editor_textarea').wysiwyg('document').keypress(function(e) {
        e.preventDefault(); //This will cancel the keypress
        alert('Keypress in jwysiwyg editor detected!');
    });
于 2012-05-06T15:27:43.600 回答
0

您可以将 autoSave 设置为 true 并执行以下操作:

$(element).wysiwyg('getContent').afterSave(function () {/ magic /}

如果您愿意,可以在此处理程序中触发元素的“更改”

于 2014-07-08T06:01:34.060 回答