Css jQuery:选择元素并在“活动”绑定上使用attr()函数

Css jQuery:选择元素并在“活动”绑定上使用attr()函数,css,dom,jquery-selectors,jquery,Css,Dom,Jquery Selectors,Jquery,我想通过jQuery选择一个输入复选框元素,并动态地勾选或取消勾选它 我使用的代码如下: $('input#my_input').attr('checked', true); 完全有效——而且效果很好。然而,这些输入元素是由jQuery统一CSS动态设置样式的——这是一个非常好的自定义样式元素jQuery库 问题是,Uniform通过在自定义包装中包装这些元素来略微改变DOM结构,尽管输入仍然具有我分配给它的ID,等等。我想使用$..live with attr,但我无法确定在使用live时如

我想通过jQuery选择一个输入复选框元素,并动态地勾选或取消勾选它

我使用的代码如下:

$('input#my_input').attr('checked', true);
完全有效——而且效果很好。然而,这些输入元素是由jQuery统一CSS动态设置样式的——这是一个非常好的自定义样式元素jQuery库

问题是,Uniform通过在自定义包装中包装这些元素来略微改变DOM结构,尽管输入仍然具有我分配给它的ID,等等。我想使用$..live with attr,但我无法确定在使用live时如何传递attr参数

有人能帮忙吗?谢谢

编辑:为了让事情更清楚一点,我在下面发布了更多的代码

我的PHP脚本正在输出一个用户表。对于每个用户,他们可以访问或不能访问站点的五个区域,在每个区域中,他们可以执行不同的任务。这些都是滴答声。但我希望有一个“预设”下拉列表,可以自动勾选特定的任务/区域访问组合

以下是我的预设开关事件:

$('select.preset_switch').change(function() {

    var user_id = $(this).attr('id');
    var preset  = $(this).val();

    switch(preset)
    {
        case 'Area 1':
            setPermissions(user_id, true, true, true, true, true);
            break;

        case 'Area 2':
            setPermissions(user_id, true, true, true, true, true);
            break;

        case 'Area 3':
            setPermissions(user_id, true, true, true, true, true);
            break;

        case 'Area 4':
            setPermissions(user_id, true, true, true, true, true);
            break;

        case 'Area 5':
            setPermissions(user_id, true, true, true, true, true);
            break;

        case 'Area 6':
            setPermissions(user_id, true, true, true, true, true);
            break;

        case 'Inactive User':
            setPermissions(user_id, false, false, false, false, false);
            break;
    }
});
设置权限功能:

// Sets the Input tickboxes for permissions editor
function setPermissions(user_id, task1, task2, task3, task4, task5)
{
    $('input#permission_task1_'+user_id ).live(function() {
        $(this).prop('checked', task1);
    });
    $('input#permission_task2_'+user_id ).live(function() {
        $(this).attr('checked', task2);
    });
    $('input#permission_task3_'+user_id ).live(function() {
        $(this).attr('checked', task3);
    });
    $('input#permission_task4_'+user_id     ).live(function() {
        $(this).attr('checked', task4);
    });
    $('input#permission_task5_'+user_id ).live(function() {
        $(this).attr('checked', task5);
    });
}
我现在知道,一切都设置为“真”-这只是为了让测试更清晰。稍后我将设置正确的访问配置

最后,我的HTML看起来像是许多动态HTML中的一行:

<tr>
    <td>John Smith</td>
    <td>
        <input type="checkbox" name="area1[]" id="permission_task1_1044" class="permission_checkbox" value="1044"  />
    </td>
    <td>
        <input type="checkbox" name="area2[]" id="permission_task2_1044" class="permission_checkbox" value="1044"  />
    </td>
    <td>
        <input type="checkbox" name="area3[]" id="permission_task3_1044" class="permission_checkbox" value="1044"  />
    </td>
    <td>
        <input type="checkbox" name="area4[]" id="permission_task4_1044" class="permission_checkbox" value="1044"  />
    </td>
    <td>
        <input type="checkbox" name="area5[]" id="permission_task5_1044" class="permission_checkbox" value="1044"  />
    </td>
    <td>
        <select class="preset_switch" id="1044">
            <option>Select a preset</option>
            <option>Area 1</option>
            <option>Area 2</option>
            <option>Area 3</option>
            <option>Area 4</option>
            <option>Area 5</option>
            <option>Area 6</option>
            <option>Inactive User</option>
        </select>
    </td>
</tr>
编辑2:问题已解决。必须在我的元素上使用$.uniform.update,以便uniform可以直观地更新它-它在我第一次使用时工作正常,只是没有刷新显示。仍然无法解释live上的错误,但嘿,它起作用了

也许你可以试试这个

$('input#my_input').live(function(){
   $(this).attr('checked', true);
});

我不明白您为什么需要其他事件处理程序,您可以直接选中/取消选中复选框:

function setPermissions(user_id, task1, task2, task3, task4, task5)
{
    $('input#permission_task1_'+user_id ).prop('checked', task1);
    $('input#permission_task2_'+user_id ).prop('checked', task2);
    $('input#permission_task3_'+user_id ).prop('checked', task3);
    $('input#permission_task4_'+user_id ).prop('checked', task4);
    $('input#permission_task5_'+user_id ).prop('checked', task5);   
}
关键是,您可以更改select,这将触发setPermissions函数。单击复选框时是否需要一些特殊操作


Chrome在错误控制台中报告:uncaughttypeerror:Object函数{$this.attr'checked',false;}没有方法'split',这只是一个愚蠢的问题,您是否将jquery与另一个javascript库(如prototype/mootools)一起使用?这可能是由于冲突,因为上面的代码应该可以工作。不,只是jQuery,也是最新版本。对不起,我还是jQuery的初学者,所以请原谅我,如果这是一个愚蠢的问题-但我不绑定任何事件。事件已发生最初的事件是菜单的更改。我现在只想在一个特定的元素上执行更改attr的操作,就像没有事件发生一样。如果你想使用live,你需要绑定到一个事件。您是否尝试使用正确的.prop jquery函数而不是.attr?谢谢您的指针-将其更新为prop,但仍有问题:你能发布实时代码吗?我觉得这个任务从来就没有完成过。。。并不是说attr/prop不起作用,问题已经解决了——已经解决了。请参阅编辑2:正如我在回答中所说,问题在于live in the setPermissions函数中。您在其中不使用事件,jquery将其解释为事件映射对象,需要类似{click:function{…}的东西。您发送一个jquery对象$'stuff'是一个对象,但不是live函数所期望的事件映射对象。
function setPermissions(user_id, task1, task2, task3, task4, task5)
{
    $('input#permission_task1_'+user_id ).prop('checked', task1);
    $('input#permission_task2_'+user_id ).prop('checked', task2);
    $('input#permission_task3_'+user_id ).prop('checked', task3);
    $('input#permission_task4_'+user_id ).prop('checked', task4);
    $('input#permission_task5_'+user_id ).prop('checked', task5);   
}