2010-12-22 37 views
1

我的第一个问题是这个,尽管我怀疑它是否可能。但是,如果是这样,它会让我的生活变得更容易。有两种形式,其中包含相同的单选按钮组?

你可以有一个单选按钮组和2个表单吗?我的意思是在form1和form2中都有相同的单选按钮组。

我需要这个的原因是,如果我点击前2个单选按钮,表单动作将会到一个页面,而如果我点击最后2个单选按钮,动作将会到另一个页面。

如果这是不可能的,我会使用一种形式,并将不得不根据我选择的单选按钮来更改表单动作。我会给前两个单选按钮授课,另一个授课另外两个单选按钮。

如果任何人都可以让我知道哪种方法更好,以及如何在jQuery中实现它,那会很棒。

非常感谢提前

+0

不,这是不可能的(考虑如何构建该标记)。你必须改变行动。 – annakata 2010-12-22 15:46:49

回答

0

我已经实现了从尖一些帮助的解决方案。这是我的代码:

$(function() { 
    $('input:radio').click(function() { 
     var $rb = $(this); 

     if ($rb.hasClass('class1')){ 
      $("#myForm").attr("action", "link1.php"); 
     }else if($rb.hasClass('class2')){ 
      $rb.closest('form').attr("action", "link2.php"); 
     } 
    }); 

    $('#btnProceed').click(function(){ 
     $('#myForm').submit(); 
    }); 
}); 
2

您不能有一组表单元素作为两个单独的窗体的一部分。仅仅构建一个这样的有效文档是不可能的。

动态更新父代<form>的“action”属性中的URL的Javascript应该不会太难。正如您所建议的那样,单选按钮元素的“class”属性可用于指导代码,因此如果您稍后需要添加一个或多个按钮,则非常灵活。

既然你包括jQuery的标签:

$(function() { 
    var actionMap = { 
    key1: 'http://yoursite.com/some/action/1', 
    key2: 'http://yoursite.com/some/action/2', 
    /* ... */ 
    }; 

    $('input:radio').click(function() { 
    var $rb = $(this); 
    for (var key in actionMap) { 
     if ($rb.hasClass(key)) 
     $rb.closest('form').attr('action', actionMap[key]); 
    } 
    }); 
}); 

什么的。您还可以使用HTML5风格的“data-”属性将URL直接存储在单选按钮元素或URL的关键片段上。 (也可能想要以同样的方式处理“更改”事件等)

0

一种形式,替代动作页面似乎是要走的路。如果你打算使用单选按钮的类,那么类似这样的东西就可以工作。

Live example

的JavaScript

// override the action page based on which radio button is checked 
$('#someForm').submit(function(e) { 
    if($('.useDefault:checked').length == 1) this.action = 'http://www.google.com'; 
    else this.action = 'http://wikipedia.org'; 
}); 

HTML

<form id="someForm" action="#"> 
    <input name="rad" type="radio" value="default0" class="useDefault" /><label>default0</label> 
    <br /> 
    <input name="rad" type="radio" value="default1" class="useDefault" /><label>default1</label> 
    <br /> 
    <input name="rad" type="radio" value="alternate0" class="useAlternate" /><label>useAlternate0</label> 
    <br /> 
    <input name="rad" type="radio" value="alternate1" class="useAlternate" /><label>useAlternate1</label> 
    <br /> 
    <input type="submit" value="submit"/> 
</form>