Получение jQuery распознать .change () в IE

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

131
задан Michael Currie 7 September 2015 в 01:39
поделиться

12 ответов

Попытайтесь использовать .click вместо .change .

96
ответ дан 24 November 2019 в 00:17
поделиться

В 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();
                    });     
});
6
ответ дан 24 November 2019 в 00:17
поделиться

Я вполне уверен, это - известная проблема с 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();
    });     
});
1
ответ дан 24 November 2019 в 00:17
поделиться

Это должно работать также:

$(document).ready(function(){
   $(".hiddenOnLoad").hide();
   $("#viewByOrg, #viewByProduct").bind(($.browser.msie ? "click" : "change"), function () {
                        $(".visibleOnLoad").show();
                        $(".hiddenOnLoad").hide();
                    });
});

Спасибо Пирс. Это было очень полезно.

14
ответ дан 24 November 2019 в 00:17
поделиться

Проблема с использованием события click вместо change заключается в том, что вы получаете событие, если выбран тот же переключатель (т.е. фактически не изменилось). Это можно отфильтровать, если вы проверите, что новое значение отличается от старого. Меня это немного раздражает.

Если вы используете событие change , вы можете заметить, что оно распознает изменение после того, как вы щелкнете по любому другому элементу в IE. Если вы вызовете blur () в событии click , это вызовет срабатывание события change (только если переключатели действительно изменились).

54
ответ дан 24 November 2019 в 00:17
поделиться

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
});
0
ответ дан 24 November 2019 в 00:17
поделиться

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 
}); 
33
ответ дан 24 November 2019 в 00:17
поделиться

У меня была такая же проблема с вводимым текстом.

Я изменил:

$("#myinput").change(function() { "alert('I changed')" });

на

$("#myinput").attr("onChange", "alert('I changed')");

, и у меня все работает нормально!

4
ответ дан 24 November 2019 в 00:17
поделиться

Это простой способ указать IE запускать событие изменения при нажатии на элемент:

if($.browser.msie) {
    $("#viewByOrg").click(function() {
        $(this).change();
    });
}

Вы можете расширить это до чего-то более общего для работы с большим количеством элементов формы:

if($.browser.msie) {
    $("input, select").click(function() {
        $(this).change();
    });
    $("input, textarea").keyup(function() {
        $(this).change();
    });
}
2
ответ дан 24 November 2019 в 00:17
поделиться

попробуйте, у меня работает

$("#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')});
0
ответ дан 24 November 2019 в 00:17
поделиться

добавьте этот плагин

jQuery.fn.radioChange = function(newFn){
    this.bind(jQuery.browser.msie? "click" : "change", newFn);
}

, затем

$(function(){
    $("radioBtnSelector").radioChange(function(){
        //do stuff
    });
});
6
ответ дан 24 November 2019 в 00:17
поделиться

В IE принудительно настроить радио и флажки для запуска события "изменения":

if($.browser.msie && $.browser.version < 8)
  $('input[type=radio],[type=checkbox]').live('click', function(){
    $(this).trigger('change');
  });
1
ответ дан 24 November 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: