如何在jquery表达式中使用函数的字符串参数

时间:2012-05-09 09:44:37

标签: javascript jquery html javascript-events

我有一些链接和选择框。我的html代码在

下面
<div>
    <div>
        <a href='#' onclick='set_checked(false,"checkbox1")'>clear</a>
        <a href='#' onclick='set_checked(true,"checkbox1")'>select</a>
    </div>
    <div>
        <input type='checkbox' name='checkbox1'/>
    </div>
</div>

<div>
    <div>
        <a href='#' onclick='set_checked(false,"checkbox2")'>clear</a>
        <a href='#' onclick='set_checked(true,"checkbox2")'>select</a>
    </div>
    <div>
        <input type='checkbox' name='checkbox2'/>
    </div>
</div>

现在我的要求是当我点击select链接时,我必须根据它的参数检查复选框。并且反转清除。这里我传递了2个参数。一种是传递布尔值(即如果是真的,则检查否则取消选中),另一种是传递复选框字段的名称参数。
我正在使用以下功能来检查或取消选中复选框

function set_checked(checked,inputFeildName){
   $('input[name=inputFeildName]').attr('checked',checked);
} 

但上面的代码不起作用。这是我的小提琴http://jsfiddle.net/vu6fs/5/

我还有一个要求,在选择任何复选框之前,必须禁用所有清除链接,选中复选框后必须启用相应的清除链接。我在javascript中应用了不透明度和“禁用”属性,但它不起作用,有人可以告诉我我的错在哪里。

任何人都可以帮助我。提前谢谢

5 个答案:

答案 0 :(得分:2)

jQuery 1.6 +

function set_checked(checked,inputFeildName){

   $('input[name="'+ inputFeildName +'"]').prop('checked',true);

} 

jQuery 1.5及以下

function set_checked(checked,inputFeildName){

   $('input[name="'+ inputFeildName +'"]').attr('checked','checked');

} 

以下是您的问题扩展示例(您想要的更多内容,关于在复选框更改时禁用/启用a标记)

<强> CSS

.disButton {
    background: transparent;
    border: none;
}
.disButton a {
    text-decoration: none;
    color: #ddd;
}

<强>的jQuery

$('input:checkbox').on('change', function() {
    enable_clear(this, this.checked);
}).change();

function enable_clear(el, checked) {
    var target = $(el).parent('div').prev('div').find('a:contains(clear)');
    if (checked) {
        target.unwrap();
    } else {
        target.wrap($('<button/>', {
            disabled: true,
            'class': 'disButton',
            width: target.width() + 'px'
        }));
    }
}
$('a').on('click', function(e) {
    e.preventDefault();
    var target = $(this).parent().next('div').find('input:checkbox');
    if (!target.is(':checked') && $(this).text() == 'select') target.click();
    if ($(this).text() == 'clear') target.click();
});

<强> DEMO

答案 1 :(得分:1)

你忘记追加我所做的字符串,这将解决你的问题

function set_checked(checked,inputFeildName)
{
    $('input[name="'+ inputFeildName+'"]').attr('checked',checked);
}  

答案 2 :(得分:1)

我认为这就是你要做的事情......顺便说一句,你有拼错field所以在再次使用变量/ attr时要小心。

function set_checked(checked,inputFeildName){
   $('input[name="'+inputFeildName+'"]').attr('checked',checked);
} 

答案 3 :(得分:1)

你的小提琴中有一些错误:

  • 您的函数set_checked在onLoad-Handler(已选中)中声明,并且仅在本地而非全局范围内可用。选择“no wrap(head)”删除包装功能,或将功能分配给window.set_checked
  • 请注意,checked属性仅代表复选框的默认值,以更改您需要使用checked property的实际状态(使用jQuery,您可以使用val())。
  • 如果要更改默认值,则无法通过将属性设置为(字符串)false来实现。该属性表示检查的checbox存在,您需要使用removeAttribute()进行禁用。使用布尔值defaultChecked属性更容易。
  • 最后但并非最不重要的是,所有其他人都检测到明显的错误:要使用变量,您需要使用而不是将其名称放入字符串(如PHP)。

您可能对id s比name属性更满意。我用适当的解决方案更新了你的小提琴:http://jsfiddle.net/vu6fs/7/

要在不合适时禁用清除/选择链接:

  • 您不能disable链接(锚点),因为您可以使用表单元素(请参阅Disable link using javascriptjQuery disable a linkDisable link using css)。好吧,我们真的不需要禁用它的功能(没有任何变化),所以我猜你只想把它变灰了。
    这可以用CSS完成,你需要触发更新关于用户更改事件以及set_checked的设置。 http://jsfiddle.net/vu6fs/9/
  • 上的示例代码
  • 使用一个切换已检查状态的链接可能更容易。它的字母可能会在“清除”和“选择”之间变化,具体取决于当前状态。

我现在have written a plugin(即jQuery原型函数)将这些链接动态添加到任何复选框元素。这意味着它也可以使用(范围)点击处理程序而不是全局范围污染set_checked函数。

答案 4 :(得分:0)

该函数有一点错误:

function set_checked(checked,inputFeildName){  
     $(**'input[name='+inputFeildName+']'**).attr('checked',checked);
}