使用jQuery修改html属性会产生意外结果

时间:2012-10-09 20:43:07

标签: javascript jquery html

我的jQuery遇到了一些不寻常的结果,并希望有人可以启发我的原因。我确信jQuery足够强大,所以我想知道我做错了什么。这就是我所拥有的(一些看似简单易懂的代码):

///////////reset default search entries/////////////
$("#sOrderByDLM").attr('checked', 'checked');
$("#sOrderByID").attr('checked', '');
$("#sOrderByPOIName").attr('checked', '');
$("#sOrderByAge").attr('checked', '');
$("#sOrderByOfficer").attr('checked', '');

$("#sOrderByDesc").attr('checked', 'checked');
$("#sOrderByAsc").attr('checked', '');

我在一个简单的javaScript函数中有这个函数,在单击非提交类型(普通)按钮时调用它。问题是,当我单击此按钮时,它实际上填充了sOrderByDLM按钮,而不是填充sOrderByOfficer单选按钮,同样底部有两个jQuery语句(例如,sOrderByAsc变为' checked'而不是sOrderByDesc)我是不是公然告诉jQuery将'checked'属性重置为第二个参数的属性,这是空白的,除非在我专门设置的情况下对于我打算默认的字段,它是'checked'?

我遇到了与复选框类似的问题,但是我通过简单地以相反的顺序调用相同的语句找到了解决方法,但这似乎在这里不起作用。如果我在剃刀中设置'checked="checked"'一切都很好,但我需要这个按钮才能在客户端工作。

无论如何,如果HTML是必要的,我会提供它,但我怀疑它是否需要,因为我已经三次检查了ID以确定。

感谢您的帮助!

(上帝保佑Stack Overflow,我不知道没有你我会做什么!:D)

更新:

                    <tr>
                        <td class="orderlineupColor"><label for="sOrderByDLM">Date Last Modified</label><br/><input type="radio" id="sOrderByDLM" name="sOrderBy" style="margin-left: 115px;" value="OrderByDLM" @OrderByFiller[0] /></td>
                        <td class="orderlineupColor"><label for="sOrderByID">Entry ID</label><br/><input type="radio" id="sOrderByID" name="sOrderBy" style="margin-left: 115px;" value="OrderByID" @OrderByFiller[1] /></td>
                        <td class="orderlineupColor"><label for="sOrderByPOIName">POI Name</label><br/><input type="radio" id="sOrderByPOIName" name="sOrderBy" style="margin-left: 115px;" value="OrderByPOIName" @OrderByFiller[2] /></td>
                        <td class="orderlineupColor"><label for="sOrderByAge">Age</label><br/><input type="radio" id="sOrderByAge" name="sOrderBy" style="margin-left: 115px;" value="OrderByAge" @OrderByFiller[3] /></td>
                        <td class="orderlineupColor"><label for="sOrderByOfficer">Officer</label><br/><input type="radio" id="sOrderByOfficer" name="sOrderBy" style="margin-left: 115px;" value="OrderByOfficer" @OrderByFiller[4] /></td>
                    </tr>
                    <tr>
                        <td class="orderlineupColor2">In Descending Or<br/>Ascending Order:</td>
                        <td class="orderlineupColor2"><label for="sOrderByDesc">Descending Order</label><br/><input type="radio" id="sOrderByDesc" name="sAscOrDesc" style="margin-left: 115px;" value="OrderByDesc" @OrderByAscOrDescFiller[0] /></td>
                        <td class="orderlineupColor2"><label for="sOrderByAsc">Ascending Order</label><br/><input type="radio" id="sOrderByAsc" name="sAscOrDesc" style="margin-left: 115px;" value="OrderByAsc" @OrderByAscOrDescFiller[1] /></td>
                        <td class="orderlineupColor2"><button type="button" class="smallbtn" onclick="clearSortEntries()">Reset Sort Entries</button></td>
                        <td class="orderlineupColor2"></td>
                    </tr>

4 个答案:

答案 0 :(得分:3)

尝试使用bools.prop()

$("#sOrderByDLM").prop('checked', true); // To check

$("#sOrderByID").prop('checked', false); // To Uncheck

答案 1 :(得分:1)

如果你想使用'checked'和''然后使用removeAttr jquery函数而不是将''空白分配给checked属性,但我不喜欢这个。分配true和false看起来更加对称,然后分配检查和删除属性。

$("#sOrderByDLM").attr('checked', 'checked');

$("#sOrderByID").removeAttr('checked');

使用true或false代替'checked'''

$("#sOrderByDLM").attr('checked', true);

$("#sOrderByID").attr('checked', false);

答案 2 :(得分:1)

要取消选中,请尝试:

$("#sOrderByAsc").removeAttr('checked', '');

checkedselected是二进制属性,不是真/假属性。

$("#sOrderByDLM").attr('checked', 'checked');是正确的。

所以:.attr('selected', 'selected');

答案 3 :(得分:-1)

.attr().prop()

之间存在差异

aaa