我有一个使用jquery的js函数,可以正常使用1.8.3.js,但是当我更新到1.9.1.js时它会退出。在这一点上我真的对jquery一无所知(它就在要研究的东西列表中,很快就会出现),所以我真的无法分辨出问题所在的位置。这是代码:
<script type="text/javascript">
var allCheckBoxSelector = '#<%=GridView1.ClientID%>
input[id*="chkAll"]:checkbox';
var checkBoxSelector = '#<%=GridView1.ClientID%>
input[id*="chkSelected"]:checkbox';
function ToggleCheckUncheckAllOptionAsNeeded()
{
var totalCheckboxes = $(checkBoxSelector),
checkedCheckboxes = totalCheckboxes.filter(":checked"),
noCheckboxesAreChecked = (checkedCheckboxes.length === 0),
allCheckboxesAreChecked = (totalCheckboxes.length ===
checkedCheckboxes.length);
$(allCheckBoxSelector).prop('checked', allCheckboxesAreChecked);
}
$(document).ready(function ()
{
$(allCheckBoxSelector).live('click', function ()
{
$(checkBoxSelector).prop('checked', $(this).is(':checked'));
ToggleCheckUncheckAllOptionAsNeeded();
});
$(checkBoxSelector).live('click', ToggleCheckUncheckAllOptionAsNeeded);
ToggleCheckUncheckAllOptionAsNeeded();
});
</script>
有关此问题的任何建议吗?同样,当引用1.8.3.js时,它工作得很好,但是当使用1.9.1.js检查时,“check all”框没有任何效果。
答案 0 :(得分:2)
jQuery 1.7中不推荐使用.live()
函数,最后在jQuery 1.9中完全删除了它。您的代码不再有效,因为您正在尝试调用不再存在的函数。代替.live()
,使用.on()
的委托事件语法。所以改变这个:
$(allCheckBoxSelector).live('click', function () {
$(checkBoxSelector).attr('checked', $(this).is(':checked'));
ToggleCheckUncheckAllOptionAsNeeded();
});
$(checkBoxSelector).live('click', ToggleCheckUncheckAllOptionAsNeeded);
到此:
$(document).on('click', allCheckBoxSelector, function () {
$(checkBoxSelector).prop('checked', $(this).is(':checked'));
ToggleCheckUncheckAllOptionAsNeeded();
});
$(document).on('click', checkBoxSelector, ToggleCheckUncheckAllOptionAsNeeded);
有关将.live()
转换为.on()
的其他详细信息,请参阅API doc for .live()
。
答案 1 :(得分:2)
.live已在1.9
中删除尝试更换:
$(checkBoxSelector).live('click', ToggleCheckUncheckAllOptionAsNeeded);
与
$(document).on('click',checkBoxSelector, ToggleCheckUncheckAllOptionAsNeeded);
答案 2 :(得分:1)
使用.prop而不是.attr作为复选框。
$(checkBoxSelector).prop('checked', $(this).is(':checked'));