возникли проблемы с переключателями, передающими значение

хорошо, поэтому я получил брошенный проект, и у меня есть ограниченный опыт js. Я пытаюсь сделать сценарий, который принимает результаты некоторых щелчков переключателей и текстовых вводов, и он собирает IP-адрес для их направления.
мой код работает lol, но я знаю, что должен быть более чистый способ.
когда я не могу вспомнить, как я пытался сделать это, но это было связано с документом.getelementbyname («loc).значение, но оно возвращалось неопределенным.. теперь, когда я пытаюсь сделать то же самое с «портовыми» радио, я хочу сделать это правильно. извините,если я испортил этот пост.

<label><input type="radio"   name="loc" value="16" onclick= "clt();" />Carolinas</label><br>
<label><input type="radio"   name="loc" value="17" onclick= "geo();"/>Georgia</label><br>
<label><input type="radio"   name="loc" value="18" onclick= "sxw();"/>Xpress</label><br><br>


<label><input type="number" placeholder="Store Number" id="thirdOct" /> </label>
<label><input type="radio" name="cwPort" value="90"/>Port 90</label>
<label><input type="radio" name="cwPort" value="91"/>Port 91</label>
<label><input type="radio" name="cwPort" value="92"/>Port 92</label>
<br>    
<input type="submit" class="fsSubmitButton" value="Connect" onclick="makeIp();" />



var ipAdd;
var sNum = "0";
var int = [":", 81 ];

// had to go this route for a value, because when I try to call by document.getElementByName("loc") in my makeIp function it returns undefined for the value of "loc" 





function clt()
{sNum = "16";}


function geo() 
{sNum = "17";}

function sxw ()
{ sNum = "18";}

function makeIp() 
{
var storeN = document.getElementById("thirdOct").value;
var octThree;
if (storeN >= 300 && storeN <= 399) {

            octThree = storeN.slice(-2);
        if (octThree < 10) { 
            octThree = storeN.slice(-1);
            window.open("http://172." + sNum + "." + octThree + ".65" + int[0]  ,"_blank");
            console.log("http://172." + sNum + "." + octThree + ".65" + int[0] );
                            }
        else { 
            window.open("http://172." + sNum + "." + octThree + ".65" + int[0]  ,"_blank");
            console.log("http://172." + sNum + "." + octThree + ".65" + int[0]  );
                                    }       

                            }
else {

        if (storeN >= 300) { 
            octThree = storeN.slice(-2);

            if (octThree < 10) { octThree = storeN.slice(-1);
            window.open("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
            console.log("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");

                                }

            else {
            window.open("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
            console.log("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
                        }
            }
        else { octThree = storeN; 
        var ipAdd    = "http://172." + sNum + "." + octThree + ".65" + int[0] + int[1] ;    
             console.log(ipAdd);
        window.open("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
        console.log("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");

       }
   }
}

таким образом, я нашел возможное решение, используя следующий код для замены функций, которые я назвал clt, geo и sxw….

var radios = document.getElementsByName('genderS');

for (var i = 0, length = radios.length; i < length; i++) {
if (radios[i].checked) {
    // do whatever you want with the checked radio
    alert(radios[i].value);

    // only one radio can be logically checked, don't check the rest
    break;
}
}

1 ответ

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

    Я изменил ваш код, чтобы избавиться от встроенных обработчиков событий HTML и консолидированного избыточного кода. Я также исправил несколько ошибок, когда вы сравнивали строковое значение с числом:

      storeN >= 300 && storeN <= 399
    

    и

      octThree < 10
    

    var rads = document.querySelectorAll(input[type=radio]);
    for(var i = 0; i < rads.length; ++i){
      rads[i].addEventListener("click", setVal);
    }
    
    var btn = document.querySelector(input[type=button]);
    btn.addEventListener("click", makeIp);
    
    var sNum = 0;
    var int = [":", 81 ];
    var ipAdd = null;
    
    function setVal(){
        sNum = parseInt(this.value, 10);
    }
    
    function makeIp() {
      var strNum = document.getElementById("thirdOct").value;
      var storeNum = parseInt(strNum, 10);
      var octThree = null;
      
      if (storeNum >= 300 && storeNum <= 399) {
            octThree = parseInt(strNum.slice(-2), 10);
            if (octThree < 10) { 
                octThree = strNum.slice(-1);
                window.open("http://172." + sNum + "." + octThree + ".65" + int[0]);
                console.log("http://172." + sNum + "." + octThree + ".65" + int[0]);
                                }
            else { 
                window.open("http://172." + sNum + "." + octThree + ".65" + int[0]);
                console.log("http://172." + sNum + "." + octThree + ".65" + int[0]);
            }       
    
      } else {
    
            if (storeNum >= 300) { 
                parseInt(strNum.slice(-2), 10);
    
                if (octThree < 10) { 
                  octThree = storeN.slice(-1);
                  window.open("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
                  console.log("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
                } else {
                  window.open("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
                  console.log("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
                }
      } else { 
        octThree = storeN; 
        var ipAdd    = "http://172." + sNum + "." + octThree + ".65" + int[0] + int[1] ;    
        console.log(ipAdd);
        window.open("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
        console.log("http://172." + sNum + "." + octThree + ".65" + int[0] + int[1],"_blank");
      }
    }
    <label><input type="radio" name="loc" value="16">Carolinas</label><br>
    <label><input type="radio" name="loc" value="17">Georgia</label><br>
    <label><input type="radio" name="loc" value="18">Xpress</label><br><br>
    
    <label><input type="number" placeholder="Store Number" id="thirdOct" /> </label>
    <label><input type="radio" name="cwPort" value="90">Port 90</label>
    <label><input type="radio" name="cwPort" value="91">Port 91</label>
    <label><input type="radio" name="cwPort" value="92">Port 92</label>
    <br>    
    <input type="button" class="fsSubmitButton" value="Connect">