如何在一次后停止jQuery函数执行

时间:2013-08-22 07:17:46

标签: jquery

我需要你的帮助。我在命中key=13时运行了一个函数,并且该函数正在调用ajax,但之后ajax函数没有停止,它一直在工作,所以我需要知道如何在一个之后停止它时间。这里有一些代码:

$(document).ready(function()
    {
        var editor = CKEDITOR.replace('articletext', {
            toolbar: [
                {name: 'basicstyles', items: ['Bold', 'Italic', 'RemoveFormat']},
                {name: 'document', items: ['Source', '-', 'NewPage', 'Preview', '-', 'Templates']}, // Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
                ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo'], // Defines toolbar group without name. 

            ]
        });            

        editor.on("key", function(event) {
            //alert(event.data.keyCode);
        if (event.data.keyCode===13)
        {                
            this.document.on("keyup", ck_jq);

        }                   
        });

    });

function ck_jq()
    {
        var charsCount = CKEDITOR.instances['articletext'].getData().replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi, '').replace(/^\s+|\s+$/g, '');
        var wordCount = CKEDITOR.instances['articletext'].getData().replace(/[^\w ]/g, "").split(/\s+/);

        var max = <?php echo $orderInfo->wordstarget; ?>;

        var txtVal = $('#title').val(); //title field value
        var descVal = $('#description').val();//description field value

        var wordstitle = txtVal.trim().replace(/\s+/gi, ' ').split(' ').length;//words in title
        var wordsdesc = txtVal.trim().replace(/\s+/gi, ' ').split(' ').length;//words in description

        var text = CKEDITOR.instances['articletext'].getData();
        var valueOfText = text + txtVal + descVal;//add all fields text to one

        var wordsCountAll = wordCount.length + wordstitle + wordsdesc;//add all fields words to text
        xajax_checkKeywords(valueOfText, <?php echo $base_url[3]; ?>, wordsCountAll);           

    }

所以我需要在执行一次后停止function ck_jq();

2 个答案:

答案 0 :(得分:4)

为什么要向文档注册事件处理程序,这就是问题,因为一旦处理程序被注册,任何只要在文档中按下任何键,函数就会被调用,在这种情况下调用注册的处理程序ck_jq。 / p>

editor.on("key", function(event) {
    //alert(event.data.keyCode);
    if (event.data.keyCode===13)
    {                
        ck_jq()
    }                   
});

答案 1 :(得分:1)

不要绑定this.document.on("keyup", ck_jq);

上的函数

每次keyup在文档上都会有效。

多次将此函数绑定多次并创建无限循环

if (event.data.keyCode===13){                
        ck_jq();
}