2011-11-18 100 views
3

我使用自动生成的名称在页面中有N个单选按钮组。如何在单选按钮的'checked'属性上调用javascript函数?

我想调用一个javascript函数作为checked属性的值。 排除EDIT后,该线(根据不同的返回值,单选按钮需要被选中或取消选中。)

<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“,值=”2“,值=”3“和值=”4“)。

将在javascript函数内创建带有类名和值的cookie。

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

如何实现这些目标/

+0

试图接受令人满意的答案。 args包含单选按钮组的名称,以便在javascript函数中,我可以创建一个名为args并且值等于1的cookie。 –

+0

是否想通过“test_check(args)”控制更改事件?我对吗 ?我的意思是当试图检查它时,你需要调用test_check(args);功能? – erimerturk

+0

@erimerturk,当页面加载时,checked =“test_check(args)”将触发javascript函数。如果函数的返回值为true,则会检查radion按钮,如果返回值为false,则不会检查它。如果将js函数分配给“已检查”属性不是预期的方式,那应该是什么方式? –

回答

0

试试这个: 在这里,我的用户自定义属性input命名为groupname。在OP的情况下groupname="<?php echo $radio_button_group_name; ?>"。然后检查该属性OP的值可以分配checked属性值。

<input type="radio" name="r1" groupname="gr1"/> 
<input type="radio" name="r2" groupname="gr2"/> 

$('input:radio').each(function() { 
    if ($(this).attr('groupname') == 'gr1') { 
     $(this).attr('checked', true); 
    } else { 
     $(this).attr('checked', false); 
    } 
}); 
+0

@Istiaque艾哈迈德这将检查每个“无线电”,它是否被检查 – thecodeparadox

+0

OP是要求设置单选按钮的选中属性,而不是检查它。 –

+0

@abdullah.abcoder,你会让你的回复更容易理解吗? –

1

假设你正在使用jQuery,使用更改事件:http://api.jquery.com/change/

+0

让我试试你的建议 –

+0

你注意到有N个无线电buttin群组吗? N没有固定值。根据情况,页面将具有可变数量的单选按钮组。 –

+0

为所有激活的单选按钮指定一个特定的类名称,并将其用作选择器。 – pradeek

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来说明我的意思更清晰地

+0

假设没有“参数”和“参数”存在。 –

+0

如果不存在'args'或'params',那么你应该怎么知道要检查什么?!?! –

+0

哈哈我说这只是为了清楚起见。 args包含单选按钮组的名称,以便从javascript函数内我可以创建一个名为args并且值等于1的cookie。类名是自动生成的。如果问题的序列号是k,则类名称是class_k。这个命名法是用php和php变量完成的,它将被分配给args。实际上,我不会为args指定任何值,而是以这种方式调用函数:test_check(<?php echo $ radio_button_group_name;?>)。 –

0

检查这个输出,有效的参数是'aa'。

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); 

} 
+0

看到我的编辑请 –

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> 
+0

ur html是用于单选按钮和js是用于复选框..错误我想..但是什么时候将JavaScript代码执行?在第一次加载页面?当用户与单选按钮随机交互时,js代码是否会执行? –

+0

当页面加载时,就像你想 – Tessmore

+0

我没有提到,我只想要加载时间功能。我还需要页面刷新。请参阅编辑 –

0

你的问题实际上可以归结为:

如何设置一个复选框的值,当第一次加载页面? (使用存储与复选框参数)

关键的见解是:

  • 不能存储参数里面的功能,并期望它负载自动评估
  • 你可以存储有关对象的内部data-属性数据
  • 您可以设置使用的$(document)中的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> 
+0

让我试试你的建议 –

+0

你的答案似乎是与Tessmore相同。每当用户与单选按钮进行交互时,我都需要执行js函数。而我在谈论单选按钮,而不是复选框。 –

+0

看到我的编辑澄清 –

0

我面临同样的问题,我的结论是,不使用“”包含的功能。

正确:

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

错误:

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