【问题标题】:IE does not fire up on change eventIE 不会在更改事件时启动
【发布时间】:2017-07-20 07:31:10
【问题描述】:

我在 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 的类似问题的答案:
- Jquery select change not firing
- .val() doesn't trigger .change() in jquery
- OnChange not firing in IE

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

谢谢

【问题讨论】:

  • OnChange not firing in IE的可能重复
  • 试试$("body").on("change", "#elementID", function(){ //code here });
  • @BobSwager 问题不重复。我已经尝试过该问题的解决方案,但它不起作用,重复的问题也没有答案。
  • @N.Ivanov 我试过了,但它不起作用(在 Chrome、Mozilla 和 Opera 中有效,但在 IE 中无效)
  • @JohnWayne 您是否尝试过通过单击Ctrl+F5 清除浏览器缓存并重新加载 javascript?可能js没有刷新。

标签: jquery internet-explorer


【解决方案1】:

有时 onChange 事件不适用于 IE。你可以尝试其他事件来达到同样的效果。改用keyup。希望这可以帮助!

这里有单选按钮,可以这样使用,示例如下:

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

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

【讨论】:

  • 我试过on click,但它是一样的,我也不需要'keyup'功能,因为用户大多用鼠标点击这个选项
  • 我已经更新了你的单选按钮的答案,我不明白为什么它被否决了。
  • 首先编写 Onclick 事件,因为对于单选按钮,触发 onchange 事件没有意义,因为单选按钮没有获得焦点。单击后,您可以调用 onchange 事件来完成您的要求。 (对于 IE,此更改也将起作用,否则您的实现将起作用(但不适用于 IE :)))
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多