Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE中event.target的问题_Javascript_Jquery_Internet Explorer - Fatal编程技术网

Javascript IE中event.target的问题

Javascript IE中event.target的问题,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我正在为状态更新系统编写js,该系统将在我正在使用的应用程序的各个页面上使用。我真的刚开始对javascript感到更舒服了,所以现在要想拥有一切都是一个挑战 状态系统基本上是facebook的克隆。在大多数情况下,一切都应该像facebook的状态更新和状态评论那样运行。预期的行为是,当用户单击status textarea时,status textarea下的div滑出,显示submit按钮以及一些其他复选框 如果用户单击页面上的任何其他位置,除了链接或任何具有类prevent\u slid

我正在为状态更新系统编写js,该系统将在我正在使用的应用程序的各个页面上使用。我真的刚开始对javascript感到更舒服了,所以现在要想拥有一切都是一个挑战

状态系统基本上是facebook的克隆。在大多数情况下,一切都应该像facebook的状态更新和状态评论那样运行。预期的行为是,当用户单击status textarea时,status textarea下的div滑出,显示submit按钮以及一些其他复选框

如果用户单击页面上的任何其他位置,除了链接或任何具有类prevent\u slideup的元素之外,div会向上滑动,隐藏submit按钮和任何复选框

我正在使用document.body click函数来确定用户单击了什么,这样我就知道如果应该隐藏表单元素,应该隐藏哪些表单元素。如果textarea有焦点或者用户正在选择与该表单配套的复选框,我不希望此幻灯片出现在textarea上。因此有了provent_slideup类。如果用户点击了链接,我也不想麻烦运行slideup逻辑。我希望他们不必等待动画就可以离开页面

我用来完成此任务的代码可以在$(document.body)中找到。单击下面的(function(e)部分,我正在对事件目标执行.is('a')检查

这段代码在chrome和firefox中正常工作,但是在ie中,当第一次单击链接时,var target中存储的元素似乎实际上是一个div而不是一个锚点。最终发生的情况是,submit div向上滑动,用户不会被带到他们刚刚单击的链接。如果第二次单击链接用户被带到页面的时间,如您所期望的

在我看来,ie对于当前被触发的事件有某种滞后

除了这一奇怪的ie错误外,整个状态模块都在工作。关于用户在打开状态文本区域后第一次单击链接时未执行的链接。此脚本中是否跳出任何可以解释此行为的内容,或者是否有人有任何其他建议

提前感谢你的帮助

$(document).ready(function(){
    $("textarea.autoresize").autoResize();
});

$(document.body).click(function (e){
    var target = e.target || e.srcElement;
    console.log(target);
    console.log($(target).is('a'));
    if($(target).hasClass('prevent_slideup') || $(target).is('a'))
    {
        return true;
    }
    else
    {
        var active_element = document.activeElement;
        var active_status_id = $(active_element).attr('data-status_id');
        var active_has_data_status_id = (typeof active_status_id !== 'undefined' && active_status_id !== false) ? true : false;

        $('textarea').each(function(){
            if($(this).hasClass('status_comment_textarea'))
            {
                var status_id = $(this).attr('data-status_id');
                if($('#comment_textarea_'+status_id).val() === '' && (!active_has_data_status_id || active_status_id !== status_id))
                {
                    hide_status_comment_submit(status_id);
                }
            }
            else if($(this).attr('id') === 'status_textarea')
            {
                if($('#status_textarea').val() === '' && $(active_element).attr('id') !== 'status_textarea')
                {
                    $('#status_textarea').html($("#status_textarea").attr('placeholder'));
                    hide_status_submit();
                }
            }
        });

        return true;        
    }
});

$("#status_textarea").live('click', function(){
    if($('#status_textarea').val() === $("#status_textarea").attr('placeholder'))
    {
        $('#status_textarea').html('');
    }
    show_status_submit();
    return false;
});

$(".comment_toggle").live('click', function(){
    var status_id = $(this).attr('data-status_id');
    show_status_comment_submit(status_id);
    return false;
});

$(".status_comment_submit").live('click', function(){
    var status_id = $(this).attr('data-status_id');
    $('#status_comment_submit_wrapper_'+status_id).addClass('status_comment_submit_successful');
    return false;
});

$(".show_hidden_comments").live('click', function(){
    var status_id = $(this).attr('data-status_id');
    $('#status_hidden_comments_'+status_id).show();
    $(this).hide();
    return false;
});

function hide_status_submit()
{
    $("#status_textarea").removeAttr('style');
    $("#status_textarea").blur();
    $("#status_block").removeClass('padding_b10');
    $("#status_submit_wrapper").slideUp("fast");
    return false;
}

function show_status_submit()
{
    if ($("#status_submit_wrapper").is(":hidden"))
    {
        $("#status_block").addClass('padding_b10');
        $("#status_submit_wrapper").slideDown('fast');
    }
    return false;
}

function hide_status_comment_submit(status_id)
{
    if(!$('#status_comment_submit_wrapper_'+status_id).is(":hidden"))
    {
        $('#status_comment_submit_wrapper_'+status_id).hide();
        $('#fake_comment_input_'+status_id).show();
        $('#comment_textarea_'+status_id).removeAttr('style');
    }
    return false;
}

function show_status_comment_submit(status_id)
{
    if($('#status_comment_submit_wrapper_'+status_id).is(":hidden"))
    {
        $('#fake_comment_input_'+status_id).hide();
        $('#status_comment_submit_wrapper_'+status_id).show();
        $('#comment_textarea_'+status_id).focus();      
    }
    return false;
}

function status_comment_submit_successful()
{
    hide_status_comment_submit($('.status_comment_submit_successful').attr('data-status_id'));
    $('.status_comment_submit_successful').removeClass('status_comment_submit_successful');
    return false;
} 

我发现我的剧本有两个主要问题

1。)document.body函数和#status_text区域live click函数相互冲突

2。)在将#status_textarea函数的逻辑添加到document.body函数后,我注意到,除非函数中有警报,否则脚本仍然无法在internet explorer中正常工作。此时的问题是,我在textarea上使用的autoresize插件也与document.body函数冲突


我可以通过添加虚拟文本输入和隐藏状态文本区域来纠正这种情况。单击虚拟文本输入时,将显示状态文本区域,并隐藏虚拟文本输入。我不知道为什么会这样,但它似乎解决了我的问题。

我发现我的脚本有两个主要问题

1。)document.body函数和#status_text区域live click函数相互冲突

2。)在将#status_textarea函数的逻辑添加到document.body函数后,我注意到,除非函数中有警报,否则脚本仍然无法在internet explorer中正常工作。此时的问题是,我在textarea上使用的autoresize插件也与document.body函数冲突


我可以通过添加虚拟文本输入和隐藏状态文本区域来纠正这种情况。单击虚拟文本输入时,将显示状态文本区域,并隐藏虚拟文本输入。我不知道为什么会这样,但它似乎解决了我的问题。

我不确定jQuery是如何解决的……但我只是想让你知道,IE使用
窗口。事件
而不是通过事件处理程序传递
事件
,我相信。@Shaz jQuery完全处理这个问题-它还规范化了事件对象,使其正常工作(主要是)跨浏览器一致性。我不确定jQuery是如何工作的……但我只是想让你知道,IE使用
窗口。我相信,event
而不是通过事件处理程序传递
事件
。@Shaz jQuery完全处理这一点-它还规范化事件对象,以便(主要)跨浏览器一致地工作。