0

ここに私が持っているコードがあります:

var tourl;
$(document).ready(function(){
    $("input#url").bind("textchange",showPage);
    $("input#url").bind("textchange",toggleButtons);
    $("input#url").focus();


    $("form#surlform").submit(function(){
        var url = $("input#url").val(); 
        $.get("api/create.php?a=&url=" + url, function(data) {
                $("input#url").val(data);
                $("input#url").select();
                $('#button').hide();
                $('#hbutton').show();
                tourl = data;
                $('#hbutton').bind('click', function() {
                    window.location = tourl + "-";
                });
            });

        return false;
    });
    });

$(document).click(function(){
    showPage();
});
$(document).mousemove(function(){
    showPage();
});
function toggleButtons() {
    $('#hbutton').hide();
    $('#button').show();
}

ご覧のとおり、データがフォームに入力されると、jQuery は通常のフォーム送信を停止し、代わりに API に接続します。API からの応答で、テキスト ボックスのテキストを応答に変更し、強調表示します。次に、送信ボタンを、API からの出力 (URL) にリンクするボタンに変更します。textchange イベントへのバインドを使用して、フォーム フィールドのテキストが変更されたときにボタンを元に戻しています。

ただし、フィールド内のテキストが実際に変更されたときにトリガーするのではなく、任意のキーを押したように見えます。たとえば、出力をコピーする場合は Ctrl+C を使用しますが、これを行うと、変更されたテキストとしてカウントされ、ボタンが元に戻ります。

ボックス内のテキストが実際に変更されたときにのみトリガーする方法はありますか?

前もって感謝します。

4

2 に答える 2

0

最後のテキストを変数に保存し、次のように実際のテキストと比較します。

var lastText = jQuery('parentElement element').val();
jQuery('parentElement').on('keyup', 'element', function() {
    if(jQuery(this).val() !== lastText) {
        // do what do you want
    }

    lastText = jQuery(this).val();
});

デモ

于 2012-05-31T11:50:34.683 に答える