【问题标题】:how to call a javascript function on radio button's 'checked' property?如何在单选按钮的“已检查”属性上调用 javascript 函数?
【发布时间】:2017-07-10 04:59:36
【问题描述】:

我在页面中有 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 的存在,选中或取消选中单选按钮。

如何实现目标/

【问题讨论】:

  • 试图接受满意的答案。 args 包含单选按钮组的名称,因此我可以在 javascript 函数中创建一个名称为 args 且值等于 1 的 cookie。
  • 你想用“test_check(args);”控制变更事件吗?我对吗 ?我的意思是当你尝试检查它时,你需要调用 test_check(args);功能?
  • @erimerturk ,当页面加载时,checked="test_check(args)" 会触发javascript函数。如果函数的返回值为真,则单选按钮将被检查,如果返回值为假,则不会被检查。如果将js函数分配给'checked'属性不是预期的方式,应该是什么方式?

标签: javascript jquery html


【解决方案1】:

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

【讨论】:

  • 你注意到有 N 个单选按钮组吗? N 没有固定值。根据情况,页面将具有可变数量的单选按钮组..
  • 为所有活动的单选按钮指定一个特定的类名并将其用作选择器。
  • 你在 args 中传递了什么?它与那个特定的输入有关吗?
【解决方案2】:

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 更清楚地表达我的意思

【讨论】:

  • 假设不存在“args”和“params”。
  • 如果不存在 argsparams 那么你怎么知道要检查什么?!?!
  • 大声笑我说这只是为了清楚起见。 args 包含单选按钮组的名称,因此我可以在 javascript 函数中创建一个名称为 args 且值等于 1 的 cookie。类名是自动生成的。如果问题的序列号是 k,则类名是 class_k 。这个命名法是用 php 完成的,php 变量将被分配给 args。实际上,我不会为 args 分配任何值,而是以这种方式调用该函数:test_check()。
  • 还有什么要澄清的吗?查看我的编辑
【解决方案3】:

检查这个输出,有效的参数是'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);

}

【讨论】:

    【解决方案4】:

    试试这个: 在这里,我使用了一个名为 groupnameinput 的自定义属性。在 OP 的情况下groupname="&lt;?php echo $radio_button_group_name; ?&gt;"。然后检查这个属性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);
        }
    });
    

    【讨论】:

    • @Istiaque Ahmed 这将检查每个 radio 是否被检查
    • OP 要求设置单选按钮的选中属性,而不是选中它。
    • @abdullah.abcoder,能否让您的回复更容易理解?
    • @Rory McCrossan,OP?无法理解您的评论
    • @Istiaque Ahmed - OP 是你海报的缩写 :)
    【解决方案5】:

    你的问题归结为:

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

    主要见解是:

    • 您不能将函数存储在参数中并期望它在加载时自动评估
    • 您可以将有关对象的数据存储在 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>
    

    【讨论】:

    • 你的答案似乎和 Tessmore 的一样。每当用户与单选按钮进行交互时,我都需要执行 js 函数。我说的是单选按钮,而不是复选框。
    【解决方案6】:

    您不能以这种方式使用checked 属性,因为值将与checked=true 相同,即使只是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>
    

    【讨论】:

    • ur html 用于单选按钮,而 js 用于复选框.. 我认为错误.. 但是 javascript 代码何时执行?第一次加载页面?当用户与单选按钮随机交互时,js代码会执行吗?
    • 当页面加载时,如你所愿
    • 我没有提到我只想要加载时功能。我也需要页面刷新。请查看编辑
    • 页面刷新也是页面加载事件。您可以在 test_check 中进行 cookie 验证,它将选中/取消选中单选按钮。 (编辑了答案,因为你想要单选按钮:)
    【解决方案7】:

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

    正确:

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

    不正确:

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

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 2022-01-11
      • 2020-03-03
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      相关资源
      最近更新 更多