0

我遇到的问题是我的文本由于某种原因没有被添加到数组中。代码看起来不错,但我可以通过打印出 array.length 来确认它没有被添加。

<script>
    function addradio(value)
    {
        var element = document.createElement("input");
        var label = document.createElement("label");
        var tele = document.getElementById("Telephone");
        var selected_text = tele.options[tele.selectedIndex].innerHTML;

        // Array uses to stop duplicate radio button
        var countryArray = new Array();

        // Used to check if country is already in array, defaults to false
        var contain = new Boolean();

        // Checks if text contains a "1", returns "-1" if it doesn't
        var str = selected_text.indexOf("1");

        // For loop to check if country name is already in the array
        for(var i = 0; i <= countryArray.length; i++)
        {
            if(countryArray[i] == selected_text)
                contain = true;
            else
                contain = false;
        }

        // If value is not empty and text does not contain a "1" and array doesn't contain specified country
        if(value != "" && str == "-1" && contain == false)
        {
            // Creating the attributes for a radio button
            element.setAttribute("type", "radio");
            element.setAttribute("value", value);
            element.setAttribute("name", "telephone");
            label.appendChild(element);
            label.innerHTML += selected_text + "<br>";

            // Creating the radio button
            var newradio = document.getElementById("fillme");
            newradio.appendChild(label);

            // Adds country into the array if its' not already there
            countryArray.push(selected_text);
        }
    }
</script>

任何人都可以识别我的 Array.push() 函数的问题吗?

4

3 回答 3

1

您创建一个空数组,然后尝试循环它。由于它是空的,它没有长度,所以循环永远不会运行。最后,您将一个值推送到数组中,但下次方法运行时,数组再次开始为空

我怀疑您打算使用同一个数组并多次调用该函数,在这种情况下,您需要在函数之外声明该数组。

您还可以摆脱for循环并使用indexOf()来查看您想要的值是否在数组中。

       // Move this outside function
    var countryArray = new Array();
     /* shorter syntax*/
     var countryArray =[];
    function addradio(value)...
于 2013-10-31T00:11:07.093 回答
0

您的 for 循环不正确。它缺少数组中的最后一个元素。

        // For loop to check if country name is already in the array
        for(var i = 0; i < countryArray.length; i++)
        {
            if(countryArray[i] == selected_text)
                contain = true;
            else
                contain = false;
        }
于 2013-10-31T00:12:35.993 回答
0

而不是执行以下操作:

for(var i = 0; i <= countryArray.length; i++)
    {
        if(countryArray[i] == selected_text)
            contain = true;
        else
            contain = false;
    }

我觉得这更容易:

   if(!!countryArray.indexOf(selected_text) && countryArray.indexOf(selected_text) > -1)
   {
       //then item exist in array. You do not have to use the base bool operator, but secondary check.
   }

所以基本上:

 if(countryArra.indexOf(selected_text) > -1)  
  {  
    //it exist! 
  }
于 2013-10-31T00:23:24.063 回答