2

テキストエリアにURLが入力されているか確認したい。これはテキストエリアをチェックする関数です:

$('#text textarea').on('input paste', function() {
            checkUrl($(this));
        });

許可される URL は 1 つのみであるため、URL ハンドラーが見つかったら、off を使用してバインドを解除します。

function checkUrl(elem) {

var words = elem.val().split(/\s+/);
$.each(words, function(index, element) {
    if (isValidURL($.trim(element))) {          
        $.ajax({...}); // Ajax call
        elem.off('input paste');
        return;
    }
});

}

関数 checkUrl は、URL を貼り付けた後 (CTRT+V) に 1 回だけでなく 2 回呼び出されます。Ajax も 2 回トリガーされます。

よろしくお願いします。

編集

これに従ってコードを変更しまし

$('#text textarea').bind('paste', function() {
        var _this = $(this);
        setTimeout( function() {
            checkUrl(_this);
        }, 100);
    });

現在、貼り付けハンドラーのみで動作していますが、主な問題は解決していません...

4

2 に答える 2

1

イベント オブジェクトを取得し、イベント タイプ 'input' を確認して、貼り付けイベントの場合は入力イベントをトリガーします。

あなたはこれを試すことができます

$('#text textarea').on('input paste',function(event){


    if(event.type=='input'){
       checkUrl($(this));
    }
 });​

デモ: http://jsfiddle.net/nLPrG/

于 2012-10-23T09:34:09.190 に答える
0

私は問題を解決したと思います。イベントをバインドする前に、要素からすべてのバインドを解除しました。

$('#text textarea').unbind();   
$('#text textarea').bind('paste', function() {
        var _this = $(this);
        setTimeout( function() {
            checkUrl(_this);
    }, 100);
})
于 2012-10-26T07:27:42.653 に答える