Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
В IE необходимо использовать событие щелчка в других браузерах onchange. Ваша функция могла стать
$(document).ready(function(){
$(".hiddenOnLoad").hide();
var evt = $.browser.msie ? "click" : "change";
$("#viewByOrg").bind(evt, function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
$("#viewByProduct").bind(evt, function () {
$(".visibleOnLoad").hide();
$(".hiddenOnLoad").show();
});
});
Я вполне уверен, это - известная проблема с IE. При добавлении обработчика для onclick
событие должно решить проблему:
$(document).ready(function(){
$(".hiddenOnLoad").hide();
$("#viewByOrg").change(function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
$("#viewByOrg").click(function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
$("#viewByProduct").change(function () {
$(".visibleOnLoad").hide();
$(".hiddenOnLoad").show();
});
$("#viewByProduct").click(function () {
$(".visibleOnLoad").hide();
$(".hiddenOnLoad").show();
});
});
Это должно работать также:
$(document).ready(function(){
$(".hiddenOnLoad").hide();
$("#viewByOrg, #viewByProduct").bind(($.browser.msie ? "click" : "change"), function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
});
Спасибо Пирс. Это было очень полезно.
Проблема с использованием события click
вместо change
заключается в том, что вы получаете событие, если выбран тот же переключатель (т.е. фактически не изменилось). Это можно отфильтровать, если вы проверите, что новое значение отличается от старого. Меня это немного раздражает.
Если вы используете событие change
, вы можете заметить, что оно распознает изменение после того, как вы щелкнете по любому другому элементу в IE. Если вы вызовете blur ()
в событии click
, это вызовет срабатывание события change
(только если переключатели действительно изменились).
imo вместо щелчка изменений делает поведение IE другим. Я бы предпочел эмулировать поведение события изменения с помощью таймера (setTimout).
что-то вроде (предупреждение - код блокнота):
if ($.browser.msie) {
var interval = 50;
var changeHack = 'change-hac';
var select = $("#viewByOrg");
select.data(changeHack) = select.val();
var checkVal=function() {
var oldVal = select.data(changeHack);
var newVal = select.val();
if (oldVal !== newVal) {
select.data(changeHack, newVal);
select.trigger('change')
}
setTimeout(changeHack, interval);
}
setTimeout(changeHack, interval);
}
$("#viewByOrg").change(function() {
// Do stuff here
});
Have you tried IE's onpropertychange event? I dont know if it makes a difference but it's probably worth a try. IE does not trigger the change event when values are updated via JS code but perhaps onpropertychange would work in this instance.
$("#viewByOrg").bind($.browser.msie? 'propertychange': 'change', function(e) {
e.preventDefault(); // Your code here
});
У меня была такая же проблема с вводимым текстом.
Я изменил:
$("#myinput").change(function() { "alert('I changed')" });
на
$("#myinput").attr("onChange", "alert('I changed')");
, и у меня все работает нормально!
Это простой способ указать IE запускать событие изменения при нажатии на элемент:
if($.browser.msie) {
$("#viewByOrg").click(function() {
$(this).change();
});
}
Вы можете расширить это до чего-то более общего для работы с большим количеством элементов формы:
if($.browser.msie) {
$("input, select").click(function() {
$(this).change();
});
$("input, textarea").keyup(function() {
$(this).change();
});
}
попробуйте, у меня работает
$("#viewByOrg")
.attr('onChange', $.browser.msie ? "$(this).data('onChange').apply(this)" : "")
.change( function(){if(!$.browser.msie)$(this).data('onChange').apply(this)} )
.data('onChange',function(){alert('put your codes here')});
добавьте этот плагин
jQuery.fn.radioChange = function(newFn){
this.bind(jQuery.browser.msie? "click" : "change", newFn);
}
, затем
$(function(){
$("radioBtnSelector").radioChange(function(){
//do stuff
});
});
В IE принудительно настроить радио и флажки для запуска события "изменения":
if($.browser.msie && $.browser.version < 8)
$('input[type=radio],[type=checkbox]').live('click', function(){
$(this).trigger('change');
});