【问题标题】:IE8 fires unintentional action (javascript) (textbox action when changed doesn't work)IE8 触发意外操作(javascript)(更改时文本框操作不起作用)
【发布时间】:2013-03-11 17:20:10
【问题描述】:

我慢慢地精神崩溃,我最后的神经消失了。 我在表格中有一个元素。如果我点击这个元素,我会得到一个文本框,如果我按下回车,文本框中的值将由 php 脚本处理。到目前为止,它工作得很好,但是...... 现在我需要,如果我在框外单击,最好说在另一个元素上,应该出现与按下回车按钮时相同的弹出窗口(你需要更改 blabla)。 我尝试使用 focusout、blur、onchange 等,但 IE 会立即触发弹出窗口,所以我没有机会在文本框中输入任何内容! 这里我的代码只适用于输入操作(输入按钮):

function modify(value, item_ID, attr_NAME, obj_name){
    $('.ajax').html($('.ajax_input').val());
    $('.ajax').removeClass('ajax');
    $(value).addClass('ajax');
    $(value).html(
             '<input id="editbox" size="' + $(value).text().length
                     + '" type="text" value="' + $(value).text()
                     + '" onkeydown="confirmAction(this.value, ' + item_id
                     + ", '" + attr_name + "'" + ", '" + obj_name + "'" + ')">');
    $('#editbox').focus();
}

让它工作:

$('.ajax').html($('.ajax input').val());
    $('.ajax').removeClass('ajax');
    $(value).addClass('ajax');
    $(value).html(
            '<input id="editbox"' + ' type="text" value="' + $(value).text() + '"/>');
    $('#editbox').focus();

    $('#editbox').keydown(function(event) {
        if (event.which == 13) {
            $(document).attr('helpAttr', false);
            confirmAction(this.value, item_id, attr_name, obj_name);
        }
    });
    $('#editbox').blur(
            function() {
                if ($(document).attr('helpAttr')
                        || ($(document).attr('helpAttr') == undefined)) {
                    confirmAction(this.value, item_id, attr_name, obj_name);
                } else {
                    $(document).attr('helpAttr', true);
                }
            });

【问题讨论】:

  • 您是否希望事件仅在您按 ENTER 时触发,以便您可以输入一个值?因为现在它可以触发任何键。
  • 我需要一个 Enter 上的事件,如果我点击其他元素或只是在外面
  • 我明白了,但是您希望能够在文本框中输入一个值,对吗?

标签: jquery internet-explorer-8 textbox action onchange


【解决方案1】:

这处理回车键:

$('#editbox').keydown(function(event) {
  if (event.which == 13) {
    confirmAction(...);
 }
}

这会处理外部的点击:

$('#editbox').blur(function() {
    confirmAction(...);
}

【讨论】:

  • 效果很好,但是有一个问题。他们一起被解雇。我在某个地方做错了吗?
  • 在这种情况下,在 keydown 处理程序的 confirmAction(...); 之前添加 event.preventDefault() 和可能的 event.stopPropagation()。第一个应该足够了。
  • 模糊什么时候触发?当您按 ENTER 时?你的代码现在看起来如何。你能提供一个小提琴吗?
  • 是的,如果我点击 enter blur() 事件会触发。我刚刚添加了 alert() 并在 IE8 中得到了对象预期错误
  • 我明天会写,但非常感谢您的大力帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多