如何在单选按钮'已检查'属性上调用javascript函数?

时间:2011-11-18 09:17:18

标签: javascript jquery html

我在页面中有N个带有自动生成名称的单选按钮组。

我想调用javascript函数作为checked属性的值。 编辑后排除的此行(根据返回值,需要选中或取消选中单选按钮。)

<input type="radio" name="auto_generated_name" value="some_value" checked="test_check(args);" />

并且javascript函数是

function test_check(params) {
    if(conditions){
        return true;
    }
    else 
        return false;    
}

但这不起作用。无论我分配给'checked'属性的是什么值,无论是任何javascript函数还是任何字符串等,单选按钮都会被选中。

我如何实现目标?

编辑:

 <input type="radio" name="auto_generated_name" value="somevalue" onclick="test_check(args)"/>

4个单选按钮组成一组。这样的N个无线电组以这种方式具有html类名:button_group_1,button_group_2,button_group_3,button_group_4等。

'args'需要是这些类(即单选按钮组)名称和相应的值(来自value =“1”,value =“2”,value =“3”和value =“4”)。

将在javascript函数中创建具有类名和值的Cookie。

在页面刷新时,将检查与类名匹配的cookie,并且根据相应cookie的存在,将选中或取消选中单选按钮。

如何实现目标/

7 个答案:

答案 0 :(得分:1)

假设您使用的是jQuery,请使用更改事件:http://api.jquery.com/change/

答案 1 :(得分:0)

试试这个: 在这里,我使用名为input的{​​{1}}自定义属性。在OP案例中groupname。然后检查此属性OP的值可以指定groupname="<?php echo $radio_button_group_name; ?>"属性值。

checked

答案 2 :(得分:0)

checked属性只是一个布尔值,用于指示是否应选中单选按钮,不能包含脚本或脚本功能的引用。属性中的任何值都将导致单选按钮被检查。

在不知道你用什么机制检查每个单选按钮的情况下 - 我可以看到一个args变量,但不知道它是什么类型 - 为你编写一些代码会很棘手。

如果您可以将args转换为值数组,那么以下内容应该适用于您:

var args = new Array(true,false,true)

$.each(args, function(index, value) {
    $("INPUT[type=radio]").eq(index).attr("checked", value)
});

Here's a fiddle更明确地表达我的意思

答案 3 :(得分:0)

检查此输出,有效的args是&#39; aa&#39;。

http://jsfiddle.net/X7rcC/1

HTML:

<input type="radio" name="auto_generated_name" value="some_value1" checked="bb" />

JS:

$(function() {
    var radios = $("input[type='radio']");
    $.each(radios, function(index, value){
        var args = value.attributes[1].nodeValue;
       test_check(args, value);
    })

});

function test_check(params, value){

    if(params == "aa"){
     $(value).attr("checked",true);
    }else
     $(value).attr("checked",false);

}

答案 4 :(得分:0)

您不能以这种方式使用checked属性,因为任何值都与checked=true相同即使只是checked也会检查单选按钮。你应该做的是使用一个自定义属性来创建checked属性:

<input type="radio" name="auto_generated_name" value="some_value" needs_check="param">

<script>
  // Do test_check on param for each input
  $('input:radio').each(function()
  {
    var radio = $(this);
    var param = radio.attr('needs_check');

    var condition = test_check(param);

    radio.attr('checked', condition);    
  });

  function test_check(param)
  {
    return true or false based on param
  }
</script>

答案 5 :(得分:0)

你的问题归结为:

  

如何在首次加载页面时设置复选框的值? (使用与复选框一起存储的参数)

关键见解是:

  • 您无法在参数内存储函数,并希望它在加载时自动评估
  • 您可以在data-属性
  • 中存储有关对象的数据
  • 您可以使用$(document).ready()事件在jQuery中设置页面加载时对象的值

。          

<script type="text/javascript">
$(document).ready( function() {                    // this code runs when the page is first loaded
   var radios = $("input[type='radio']");          // find all of your radio buttons
    $.each(radios, function(){
       var radio = $(this);
       var param = radio.attr('data-param');       // retrieve the param from the object
       radio.attr('checked', test_check(param) );  // set the value of the radio button
    })
});

function test_check(params) {
    if(conditions){
        return 'checked';
    }
    else 
        return '';    
}
</script>

答案 6 :(得分:0)

我遇到了同样的问题,我的结论是不要使用“”来包含一个函数。

正确:

<input type="radio" name="im" id="b1" onclick=alert("hello"); />

不正确:

<input type="radio" name="im" id="b1" onclick="alert("hello");" />