IE不会启动更改事件

时间:2017-07-20 07:31:11

标签: jquery internet-explorer

我在IE中启动on change事件时遇到问题。我尝试的所有功能都在其他浏览器中工作,如Chrome,Mozilla,Safari,Opera ...但不是在IE 11中

这是我的代码

HTML

<form method="post" id="exchangeType" action="/orders/vesselExchange">
...
<label id="deliveryDateTitleLabel" for="deliveryDate"><?= __('First time') ?></label><br/>
                <label class="radio radio-inline m-r-20">
                  <input type="radio" name="deliveryDate" value="asap" checked>
                  <i class="input-helper"></i>
                  <?= __('First time') ?>
                </label>

                <label class="radio radio-inline m-r-20">
                  <input type="radio" name="deliveryDate" value="custom">
                  <i class="input-helper"></i>
                  <?= __('Second time') ?>
                </label>
...
</form>

的jQuery

$('#exchangeType input').on('change', function() {
  console.log('in function');
  let option = ($('input[name=deliveryDate]:checked', '#exchangeType').val());
  let dateTimePicker = $('#showPicker');

  if (option === 'custom') {
    dateTimePicker.removeClass('hidden');
  }

  if (option === 'asap') {
    dateTimePicker.addClass('hidden');
  }
});

到目前为止我一直在尝试

$(document).on('change','#exchangeType input' ,function(){
...
}

$(document.body).on('change','#exchangeType input' ,function(){
...
}

$('#exchangeType').on('change','input[name=deliveryDate]',function(){
...
}

与“click”相同的功能(不更改)

我已经在stackoverflow上阅读并实现了similair问题的一些答案:
- Jquery select change not firing
- .val() doesn't trigger .change() in jquery
- OnChange not firing in IE

但它不起作用......

谢谢

2 个答案:

答案 0 :(得分:0)

有时onChange事件不适用于IE。您可以尝试其他事件来实现相同的目标。请改用密钥。希望这可以帮助!

这里有单选按钮,所以你可以像这样使用,下面给出了一些例子:

<input type="radio" name="namehere" value="1" onclick="handleClick();" onchange="javascript:yourmethod()"/>

function handleClick()
{
 this.blur();  
 this.focus();  
}

答案 1 :(得分:0)

由于这在IE中不起作用,你可以这样做:

var previousFormState = getFormState();
setTimeout(function() {
    var formState = getFormState();
    if (differs(formState, previousFormState)) {
        handleChange();
        previousFormState = formState;
    }
}, 1000);

这里使用了很多function,我相信你可以实现它们,但算法是定期测试form状态是否已经改变,如果是,则处理更改。您需要确保在使用submit处理程序.submit()表单之前最后一次执行此操作。