2013-02-22 2 views
1

У меня есть функция js с использованием jquery, которая отлично работает с 1.8.3.js, но когда я обновляюсь до 1.9.1.js, она завершает работу. Я действительно ничего не знаю о jquery на данный момент (он находится в списке вещей для изучения, скоро придет), поэтому я действительно не могу сказать, глядя на него, где может возникнуть проблема. Вот код:проблема с совместимостью 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 проверка флажка «проверить все» не имеет никакого эффекта.

ответ

2

.live() функция был устаревшим в JQuery 1.7, а затем, наконец, полностью удален в 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().

+0

Я только что нашел это в другом месте. Когда я был googling, очевидно, я использовал неправильные ключевые слова и не мог найти его (так же, как когда я делал это сообщение.) После того, как сообщение было завершено, я увидел связанный пост, который ссылался на него, расположенный здесь: http: // stackoverflow. com/questions/14483514/asp-net-webforms-check-all-checkboxes-in-a-gridview-using-jquery-v1-9-0-doesn? rq = 1 Спасибо за быстрый ответ, я буду отметьте как ответ через 6 минут, когда смогу. :) – Ben

1

Используйте .prop вместо .attr для флажков.

$(checkBoxSelector).prop('checked', $(this).is(':checked')); 
+0

Я сделал это изменение, но это не имело никакого эффекта. – Ben

2

.live был удален в 1,9

попытки замены:

$(checkBoxSelector).live('click', ToggleCheckUncheckAllOptionAsNeeded); 

с

$(document).on('click',checkBoxSelector, ToggleCheckUncheckAllOptionAsNeeded); 
Смежные вопросы