2

我使用这个简单的 Jquery 代码从 div 中获取元素,然后通过 php 脚本对其进行更改:

$(document).ready(function(){
    $("#description").keyup(function(){
    var recherche = $(this).val();

    $.ajax({
        type : "GET",
        url : "result.php",
        data : {motclef: recherche},
        success: function(server_response){
        $("#resultat").html(server_response).show();
        }
    });
});

});

问题是可以在不按任何键(复制/过去...)的情况下发生一些更改。我曾尝试使用 .change() 但它仅在元素焦点丢失时触发。

4

1 回答 1

1

你可以告诉 jQuery 在一次调用中绑定多个事件,就像这样。进入方法后,您可以根据事件类型过滤行为。在处理粘贴时,最好稍微延迟函数调用,以允许浏览器首先完成它需要做的所有事情。

编辑

为了处理自动完成,我已经根据这个 stackoverflow答案更新了答案。

$("#description").on("keyup paste cut focus change blur",function (event) {

    var $this = $(this),
        delay = 0

    // Add delay for cut/paste
    if (event.type === "paste" || event.type === "cut") {
        delay = 5;
    }

    // Record the current value of the text box.
    if (event.type === "focus" || event.type === "change") {
        this.previousvalue = this.value;
    }

    // Trigger the change event if the value is now different.
    if (event.type === "blur") {
        if (this.previousvalue !== this.value){
            $this.change();
            return false;
        }
    }

    window.setTimeout(function () {

        var recherche = $this.val();

        $.ajax({
            type : "GET",
            url : "result.php",
            data : {motclef: recherche},
            success: function(server_response){
                $("#resultat").html(server_response).show();
            }
        });                  

    }, delay);
});
于 2012-11-30T15:01:47.633 回答