حلقة من خلال <اختر <وبناء مجموعة في شكل: "VALUE1"، "و value2"، "value3"

StackOverflow https://stackoverflow.com/questions/231666

  •  04-07-2019
  •  | 
  •  

سؤال

وأنا أتساءل عما إذا كان أي شخص يمكن أن تشير إلى أن أفضل طريقة للحلقات من خلال جميع <option> الصورة في عنصر <select> مع مسج، وبناء صفيف.

وعلى سبيل المثال.

وبدلا من ما يلي، حيث مرت على خصوصيات السلسلة إلى autoCompleteArray ()،

$("#CityLocal").autocompleteArray(
        [
            "Aberdeen", "Ada", "Adamsville", "Zoar" //and a million other cities...
        ],
        {
            delay:10,
            minChars:1,
            matchSubset:1,
            onItemSelect:selectItem,
            onFindValue:findValue,
            autoFill:true,
            maxItemsToShow:10
        }
    );

و... ولست بحاجة لحلقة من خلال جميع <options> في <select> ودفعهم إلى صفيف، ويمر هذا المتغير الصفيف إلى وظيفة بدلا من سلسلة طويلة.

وعلى سبيل المثال،

$("#CityLocal").autocompleteArray(
            [
                MyBigArrayOfOptions
            ],
            {
                delay:10,
                minChars:1,
                matchSubset:1,
                onItemSelect:selectItem,
                onFindValue:findValue,
                autoFill:true,
                maxItemsToShow:10
            }
        );

وسأكون ممتنا لو تفضلتم اقتراح كيفية دفع الاشياء في صفيف بالشكل الصحيح. لقد ساسيد حد كبير جزءا من حلقات وظيفة أخرى على هذا الموقع.

وشكرا.

هل كانت مفيدة؟

المحلول

وهذا يجب أن تعمل:

$(document).ready(function(){
  // array of option elements' values
  var optionValues = [];
  // array of option elements' text
  var optionTexts = [];

  // iterate through all option elements
  $('#sel > option').each(function() {
    // get value/text and push it into respective array
    optionValues.push($(this).val());
    optionTexts.push($(this).text());
  });

  // test with alert
  alert(optionValues);
  alert(optionTexts);
});

وبالنظر إلى أن عنصر select لديه ID <م> قانون حالة الطوارئ .

نصائح أخرى

ويمكن أن تكون وظيفة jQuery.map ما كنت تبحث عن . رمز أدناه سيخلق صفيف يحتوي على كافة القيم أو قيم نصية للخيارات <select>.

var values = jQuery.map(jQuery("#select")[0].options, function(option)
             {
                return option.value;
             });

var texts = jQuery.map(jQuery("#select")[0].options, function(option)
            {
                return option.innerHTML;
            });

وكل ما عليك فعله هو تمرير مجموعة كمعلمة الأول دون الأقواس. بين قوسين خلق مجموعة جديدة، ولكن لا تحتاج للقيام بذلك لأنك تمر بالفعل صفيف. مجرد القيام به:

$("#CityLocal").autocompleteArray(
                MyBigArrayOfOptions,
                {
                        delay:10,
                        minChars:1,
                        matchSubset:1,
                        onItemSelect:selectItem,
                        onFindValue:findValue,
                        autoFill:true,
                        maxItemsToShow:10
                }
        );

إذا فهمت سؤالك corrently، يجب التعليمات البرمجية التالية تفعل ما تحتاج:

myFunction($("#my-select option"));

وإخراج الاستعلام هو بالفعل مجموعة من الخيارات التي هي من نسل حدد، لذلك لا تحتاج لدفعهم إلى مجموعة أخرى. بدلا من ذلك، إذا لم يكن لديك تحديد الهوية، ولكن لديك عنصر DOM:

myFunction($("option", theSelect));

وسد هذه الفكرة مرة أخرى في التعليمات البرمجية:

$("#CityLocal").autocompleteArray(
    $("option", theSelect),
    {
            delay:10,
            minChars:1,
            matchSubset:1,
            onItemSelect:selectItem,
            onFindValue:findValue,
            autoFill:true,
            maxItemsToShow:10
    }
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top