Установить выбранные индексы в множественном выборе, используя JavaScript - PullRequest
4 голосов
/ 01 декабря 2011

Я не уверен, почему это не работает, и хотел бы помочь с этим!И да, я посмотрел на this

Я пытаюсь установить несколько параметров в выбранном элементе, как выбранный, используя массив, содержащий значения, которые я хочу выбрать, и прорабатывая как массив, так и параметры вэлемент выбора.Пожалуйста, найдите код ниже:

// value is the array.
for (var j = 0; j < value.length; j++) {
    for (var i = 0; i < el.length; i++) {
        if (el[i].text == value[j]) {
            el[i].selected = true;
            alert("option should be selected");
        }
    }
}

После завершения этих циклов ничего не выбирается, даже если оповещение () срабатывает.

Любые идеи приветствуются!

Спасибо

CM

PS (не уверен, что случилось с форматированием кода).

РЕДАКТИРОВАТЬ: Полная функция

    if (CheckVariableIsArray(value) == true) {
        if (value.length > 1) { // Multiple selections are made, not just a sinle one.
            var checkBoxEl = document.getElementById(cbxElement);
            checkBoxEl.checked = "checked";
            checkBoxEl.onchange(); // Call function to change element to a multi select
            document.getElementById(element).onchange(); // Repopulates elements with a new option list.
            for (var j = 0; j < value.length; j++) {
                for (var i = 0; i < el.length; i++) {
                    if (el[i].text === value[j]) {
                        el[i].selected = true;
                        i = el.length + 1;
                    }
                }
            }
            //document.getElementById(element).onchange();
        }
    }
    else {
        for (var i = 0; i < el.length; i++) {
            if (el[i].innerHTML == value) {
                el.selectedIndex = i;
                document.getElementById(element).onchange();
            }
        }
    }

Ответы [ 3 ]

1 голос
/ 25 июля 2012

Ну, во-первых, вы должны установить свойство html select control множественное, что-то вроде этого "...", и затем вы можете использовать функцию javascript SetMultiSelect (определенную, как показано ниже), чтобы установить элемент управления HTML выбора:

function SetMultiSelect(multiSltCtrl, values)
{
    //here, the 1th param multiSltCtrl is a html select control or its jquery object, and the 2th param values is an array
    var $sltObj = $(multiSltCtrl) || multiSltCtrl;
    var opts = $sltObj[0].options; //
    for (var i = 0; i < opts.length; i++)
    {
        opts[i].selected = false;//don't miss this sentence
        for (var j = 0; j < values.length; j++)
        {
            if (opts[i].value == values[j])
            {
                opts[i].selected = true;
                break;
            }
        }
    }
    $sltObj.multiselect("refresh");//don't forget to refresh!
}

$(document).ready(function(){
    SetMultiSelect($sltCourse,[0,1,2,3]);
});
1 голос
/ 01 декабря 2011

У меня работает.Вы правильно настраиваете el и value?И вы уверены, что хотите посмотреть на innerHTML каждого параметра вместо атрибута его значения?

См. jsFiddle .


HTML:

<select id="pick_me" multiple="multiple">
    <option>Hello</option>
    <option>Hello</option>
    <option>Foo</option>
    <option>Bar</option>
</select>

JS:

var value = ['Foo', 'Bar'],
    el = document.getElementById("pick_me");

// value is the array.
for (var j = 0; j < value.length; j++) {
    for (var i = 0; i < el.length; i++) {
        if (el[i].innerHTML == value[j]) {
            el[i].selected = true;
            //alert("option should be selected");
        }
    }
}
0 голосов
/ 29 мая 2014

столкнулся с этим вопросом и не был удовлетворен ответами. Вот общая, не jQuery-версия. Он использует Array.indexOf, где это возможно, но возвращается к циклу foreach, если он недоступен.

Передать узел в функцию вместе с массивом значений. Будет сгенерировано исключение, если в него передан недопустимый элемент. Для проверки значения используется ===. По большей части, убедитесь, что вы сравниваете значение параметра с массивом строк.

например. selectValues( document.getElementById( 'my_select_field' ), [ '1', '2', '3'] );

var selectValues = (function() {

    var inArray = ( function() {

        var returnFn;

        if( typeof Array.prototype.indexOf === "function" ) {

            returnFn = function(option, values) {

                return values.indexOf( option.value ) !== -1;

            };

        } else {

            returnFn = function(option, values) {

                var i;

                for( i = 0; i < values.length; i += 1 ) {

                    if( values[ i ] === option.value ) {

                        return true;

                    }

                }

                return false;

            }

        }

        return returnFn;

    }() );

    return function selectValues(elem, values) {

        var 
            i,
            option;

        if( typeof elem !== "object" || typeof elem.nodeType === "undefined" )
            throw 'selectValues() expects a DOM Node as it\'s first parameter, ' + ( typeof elem ) + ' given.';

        if( typeof elem.options === "undefined" ) 
            throw 'selectValues() expects a <select> node with options as it\'s first parameter.';

        for( i = 0; i < elem.options.length; i += 1 ) {

            option = elem.options[ i ];

            option.selected = inArray( option, values );

        }

    }

}());
...