Как «открепить» .result на автозаполнении Jquery? - PullRequest
1 голос
/ 17 марта 2010

У меня есть этот код:

$("#xyz").unautocomplete().autocomplete(dataVar, {
    minChars: 0,
    width: 400,
    matchContains: true,
    highlightItem: true,
    formatItem: formatItem,
    formatResult: formatResult
})
.result(findValueCallback).next().click(function() {
    $(this).prev().search();
});

Я вызываю этот код много раз, и первый вызов работает правильно, но после он звонит findValueCallback много раз, а не еще раз.

unautocomplete не очистить .result

Что я должен сделать для звонка findValueCallback один раз?

Пример кода:

var niveis01 = [];
var niveis02 = [];
var niveis03 = [];

$(document).ready(function(){
    carregaDadosNivel1();
});

function carregaDadosNivel1() {
    $.ajax({
        url: "http://.....",
        cache: true,
        type: "POST",
        dataType:"json",
        success: function(data){
            ...
            niveis01 = data;
            habilitaComboNivel1();
            ...
        },
        error: function(xhr, ajaxOptions, thrownError){
            ...
        }
    });
}

function habilitaComboNivel1() {
    function findValueCallback1(event, data01, formatted) {
        ...
        carregaDadosNivel2();
        ...
    }

    $("#nivel01").unautocomplete().autocomplete(niveis01, {
        minChars: 0,
        width: 400,
        matchContains: true,
        highlightItem: true,
        formatItem: formatItem,
        formatResult: formatResult
    }).result(findValueCallback1).next().click(function() {
        $(this).prev().search();
    });
}

function carregaDadosNivel2() {
    $.ajax({
        url: "http://.....",
        cache: true,
        type: "POST",
        dataType:"json",
        success: function(data){
            ...
            niveis02 = data;
            habilitaComboNivel2();
            ...
        },
        error: function(xhr, ajaxOptions, thrownError){
            ...
        }
    });
}

function habilitaComboNivel2() {
    function findValueCallback2(event, data02, formatted) {
        ...
        carregaDadosNivel3();
        ...
    }

    $("#nivel02").unautocomplete().autocomplete(niveis02, {
        minChars: 0,
        width: 400,
        matchContains: true,
        highlightItem: true,
        formatItem: formatItem,
        formatResult: formatResult
    }).result(findValueCallback2).next().click(function() {
        $(this).prev().search();
    });
}

function carregaDadosNivel3() {
    $.ajax({
        url: ""http://.....",
        cache: true,
        type: "POST",
        dataType:"json",
        success: function(data){
            ...
            niveis03 = data;
            habilitaComboNivel3();
            ...
        },
        error: function(xhr, ajaxOptions, thrownError){
            ...
        }
    });
}

function habilitaComboNivel3() {
    function findValueCallback3(event, data03, formatted) {
        ...
    }

    $("#nivel03").unautocomplete().autocomplete(niveis03, {
        minChars: 0,
        width: 400,
        matchContains: true,
        highlightItem: true,
        formatItem: formatItem,
        formatResult: formatResult
    }).result(findValueCallback3).next().click(function() {
        $(this).prev().search();
    });
}

Ответы [ 2 ]

2 голосов
/ 17 марта 2010

Сделайте это, чтобы очистить обработчик:

$("#xyz").unbind('result');

Вот как .result() работает внутри:

result: function(handler) {
    return this.bind("result", handler);
}

Так что вы просто хотите сделать обратное и открепить

0 голосов
/ 14 января 2013

Также вы можете очистить кеш для этого селектора:

$("#xyz").flushCache();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...