Tengo una lista de selección donde quiero filtrar las opciones de una entrada de texto.

Escribí este código jQuery:

$('#NotPublishedSelectFilter').keyup(function () {
    console.log("NotPublishedSelectFilter keyup");
    var filterText = $(this).val();
    console.log("filterText: " + filterText);
    var allOptions = $('#NotPublishedSelect').find('option');
    allOptions.each(function (i, e) {
        console.log(i);
        if (e.text().indexOf(filterText) != -1) {
            e.show();
            console.log("show");
        } else {
            e.hide();
            console.log("hide");
        }
    });
});

Sin embargo, aparece el error Uncaught TypeError: e.text is not a function. Me meto en cada ciclo, por lo que debería haber alguna opción para e.

¿Qué estoy haciendo mal?

1
Lord Vermillion 10 dic. 2015 a las 12:03

3 respuestas

La mejor respuesta

Debe usar el valor actual en un objeto jQuery para tener acceso al método .text(). Tratar:

    $('#NotPublishedSelectFilter').keyup(function () {
        console.log("NotPublishedSelectFilter keyup");
        var filterText = $(this).val();
        console.log("filterText: " + filterText);
        var allOptions = $('#NotPublishedSelect').find('option');
        allOptions.each(function (i, e) {
            console.log(i);
            if ($(this).text().indexOf(filterText) != -1) {
                $(this).show();
                console.log("show");
            } else {
                $(this).hide();
                console.log("hide");
            }
        });
    });
2
Rapid 10 dic. 2015 a las 09:08

Necesita una variable de objeto, pero accede a la variable de evento. Así que por favor usa este

$('#NotPublishedSelectFilter').keyup(function () {
    console.log("NotPublishedSelectFilter keyup");
    var filterText = $(this).val();
    console.log("filterText: " + filterText);
    var allOptions = $('#NotPublishedSelect').find('option');
    allOptions.each(function (i, e) {
        console.log(i);
        $(this).text()
        if ($(this).text().indexOf(filterText) != -1) {
            $(this).show();
            console.log("show");
        } else {
            $(this).hide();
            console.log("hide");
        }
    });
});
1
Ahmad Asjad 10 dic. 2015 a las 09:09

Intente cambiar su selector dentro del bucle: -

$('#NotPublishedSelectFilter').keyup(function () {
    console.log("NotPublishedSelectFilter keyup");
    var filterText = $(this).val();
    console.log("filterText: " + filterText);
    var allOptions = $('#NotPublishedSelect').find('option');
    allOptions.each(function (i, e) {
        console.log(i);
        if ($(e).text().indexOf(filterText) != -1) {
            $(e).show();
            console.log("show");
        } else {
            $(e).hide();
            console.log("hide");
        }
    });
});

Te puede ayudar.

2
Harsh Sanghani 10 dic. 2015 a las 09:07
34197562