【问题标题】:Getting url from 2 groups of radio buttons从 2 组单选按钮获取 url
【发布时间】:2013-11-29 21:17:56
【问题描述】:

我正在尝试根据两组单选按钮查找 url,我的 html 如下所示:

<form>
  <fieldset>
    <label><input type="radio" name="comp" id="pink" value="Pink">Pink</label>
    <label><input type="radio" name="comp" id="black" value="Black">Black</label>
    <br>
    <br>
    <label><input type="radio" name="skin" id="fair" value="Fair">Fair</label>
    <label><input type="radio" name="skin" id="medium" value="Medium">Medium</label>
    <label><input type="radio" name="skin" id="tan" value="Tan">Tan</label>
    <label><input type="radio" name="skin" id="dark" value="Dark">Dark</label>
  </fieldset>
</form>

<a href="url from script">CONTINUE</a>

我知道我在这里必须使用 javascript 才能获得正确的 url。

我想它必须像这样构建:

if comp = "pink" then
  switch(skin)
  {
    case Fair:
      url = www.pinkfair.com;
      break;
    case Medium:
      url = www.pinkmedium.com;
      break;
    case Tan:
      url = www.pinktan.com;
      break;
    case Dark:
      url = www.pinkdark.com;
      break;
    }
else
  switch(skin)
  {
    case Fair:
      url = www.blackfair.com;
      break;
    case Medium:
      url = www.blackmedium.com;
      break;
    case Tan:
      url = www.blacktan.com;
      break;
    case Dark:
      url = www.blackdark.com;
      break;
    }

但是正如你所看到的,我是一个 javascript 新手,有没有人可以帮助我微调代码。

提前致谢。

/让

【问题讨论】:

    标签: javascript jquery html radio-button


    【解决方案1】:

    一种解决方案是向这样的单选按钮添加特定的类(您也可以按名称使用选择器,我个人觉得选择类更容易):

    <form>
      <fieldset>
        <label><input class="first" type="radio" name="comp" id="pink" value="Pink">Pink</label>
        <label><input class="first" type="radio" name="comp" id="black" value="Black">Black</label>
        <br>
        <br>
        <label><input class="second" type="radio" name="skin" id="fair" value="Fair">Fair</label>
        <label><input class="second" type="radio" name="skin" id="medium" value="Medium">Medium</label>
        <label><input class="second" type="radio" name="skin" id="tan" value="Tan">Tan</label>
        <label><input class="second" type="radio" name="skin" id="dark" value="Dark">Dark</label>
      </fieldset>
    </form>
    
    <a class="resultLink" href="url from script">CONTINUE</a>
    

    ...既然您已经将输出 url 的一部分保留为值/id,请让 jQuery 处理其余部分...

    $('.first, .second').change(function() {
        var firstPart = $('.first:checked').val();
        var secondPart = $('.second:checked').val();
        var url = 'www.' + firstPart + secondPart + '.com';
    
        $('.resultLink').attr('href', url);
    })
    

    对于更复杂的场景,请使用 Sajad Deyargaroo 提供的解决方案。

    【讨论】:

    • 应该是$('.first, .second'),否则只能匹配.first AND .second,即什么都没有。
    • 在实际场景中,url显然不会是两个单选按钮的值串联,所以在上面的方法中,我们仍然需要编写ifs和switches。
    【解决方案2】:

    由于我们必须根据从两个单选按钮组中选择的单选按钮获取 url,因此您编写的逻辑实际上可以正常工作。我在 JavaScript/JQuery 中编写了相同的内容,如下所示。

    但在此之前,我想向您展示一个简单的解决方案,将 url 属性添加到单选按钮,这将减少一点代码。

    这是有效的(经过测试的)解决方案。

    HTML

    <form>
      <fieldset>
        <label><input type="radio" name="comp" id="pink" value="Pink">Pink</label>
        <label><input type="radio" name="comp" id="black" value="Black">Black</label>
        <br>
        <br>
        <label><input type="radio" name="skin" id="fair" value="Fair" data-pinkurl="www.pinkfair.com" data-blackurl="www.blackfair.com" >Fair</label>
        <label><input type="radio" name="skin" id="medium" value="Medium" data-pinkurl="www.pinkmedium.com" data-blackurl="www.blackmedium.com">Medium</label>
        <label><input type="radio" name="skin" id="tan" value="Tan" data-pinkurl="www.pinktan.com" data-blackurl="www.blacktan.com">Tan</label>
        <label><input type="radio" name="skin" id="dark" value="Dark" data-pinkurl="www.pinkdark.com" data-blackurl="www.blackdark.com">Dark</label>
      </fieldset>
    </form>
    

    脚本

    var comp = $("input[type='radio'][name='comp']:checked").val();
    var url = '';
    
    if (comp == "Pink"){
       url = $("input[type='radio'][name='skin']:checked").attr("data-pinkurl");
    }
    else{
       url = $("input[type='radio'][name='skin']:checked").attr("data-blackurl");
    }
    

    另外,如上所述,下面是您更新的代码,它也可以正常工作。

    var comp = $("input[type='radio'][name='comp']:checked").val();
    var skin = $("input[type='radio'][name='skin']:checked").val();
    var url = '';
    
    if (comp == "Pink"){
      switch(skin)
      {
        case "Fair":
          url = "www.pinkfair.com";
          break;
        case "Medium":
          url = "www.pinkmedium.com";
          break;
        case "Tan":
          url = "www.pinktan.com";
          break;
        case "Dark":
          url = "www.pinkdark.com";
          break;
        }
    }
    else{
      switch(skin)
      {
        case "Fair":
          url = "www.blackfair.com";
          break;
        case "Medium":
          url = "www.blackmedium.com";
          break;
        case "Tan":
          url = "www.blacktan.com";
          break;
        case "Dark":
          url = "www.blackdark.com";
          break;
        }
    }
    

    最后,如果你不想使用 jQuery 并且想要一个纯 JavaScript 的解决方案,那么你需要检查每个单选按钮,看看它是否被选中。

    if (document.getElementById('pink').checked) {
      comp = document.getElementById('pink').value;
    }
    

    【讨论】:

    • 谢谢,切换它看起来我需要,我没有锁定我的 URL 的特定结构。但是如何将 url 变量放入我的链接中?我试图将以下内容放入脚本中,但它不起作用: document.write('CONTINUE');感谢您的大力帮助。 / 让
    • 我试过了,效果很好。 var url = 'sajad.wordpress.com'; document.write('&lt;a href="http://' + url + '"&gt;CONTINUE&lt;/a&gt;');
    • 另外,如果它解决了您的问题,请接受这个答案。
    • 我仍然无法让它工作。我已经检查过,我认为这与我在 XHTML 文档中编写它有关。是否有任何替代 document.write 与 xhtml 一起使用的方法? /ean
    • 试试这个:document.body.appendChild('&lt;a href="http://' + url + '"&gt;CONTINUE&lt;/a&gt;');
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2011-03-14
    • 2021-12-29
    相关资源
    最近更新 更多