Css jQuery:选择元素并在“活动”绑定上使用attr()函数
我想通过jQuery选择一个输入复选框元素,并动态地勾选或取消勾选它 我使用的代码如下: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时如
$('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);
}