Javascript 仅在父Div上跟踪onBlur事件

Javascript 仅在父Div上跟踪onBlur事件,javascript,jquery,Javascript,Jquery,我正在为我的应用程序准备一个自定义下拉控件。要求在这里 主要流程: 如果单击文本框,将打开一个div,用户需要从该div中选择一个项目。所选项目需要填充到文本框中 交替流程:如果用户单击文本框,然后单击屏幕上除下拉div之外的其他位置,则下拉div应关闭 我能够轻松实现主流程。我无法为我提到的备用流编写代码脚本。我尝试过简单的模糊事件,它不起作用 请帮我解决这个问题 HTML 您可以使用停止单击传播,并在文档上添加单击处理程序以关闭打开的下拉列表 代码: 演示: <input type="

我正在为我的应用程序准备一个自定义下拉控件。要求在这里

主要流程: 如果单击文本框,将打开一个div,用户需要从该div中选择一个项目。所选项目需要填充到文本框中

交替流程:如果用户单击文本框,然后单击屏幕上除下拉div之外的其他位置,则下拉div应关闭

我能够轻松实现主流程。我无法为我提到的备用流编写代码脚本。我尝试过简单的模糊事件,它不起作用

请帮我解决这个问题

HTML


您可以使用停止单击传播,并在文档上添加单击处理程序以关闭打开的下拉列表

代码:

演示:

<input type="text" class="display-none food-textbox" id="txtFood"  value="None"/>
<div class="food-dropdown display-none"> 
    <div class="food-item">Curled Spinach</div>
    <div class="food-item">Veg Mayo</div>
    <div class="food-item">French Toast</div>
    <input type="hidden" id="hdnFoodTargetTxt"/>
</div>
$('.food-textbox').on('click', function () {
    var positionOfTb = $(this).offset();
    var widthofTb = $(this).width();
    $('.food-dropdown').removeClass('display-none').offset({ top: positionOfTb.top, left: positionOfTb.left }).css('width', widthofTb + 10);
    $('.food-dropdown').focus();
    $('#hdnFoodTargetTxt').val($(this).attr('id'));
});

$('.food-item').on('click', function () {
    var targetTxt = '#' + $('#hdnFoodTargetTxt').val();
    $(targetTxt).val($(this).html());
    $(targetTxt).next().eq(0).val($(this).html());
    $('.food-dropdown').addClass('display-none');
});
$('.food-textbox').on('click', function (e) {
    e.stopPropagation();
    var positionOfTb = $(this).offset();
    var widthofTb = $(this).width();
    $('.food-dropdown').removeClass('display-none').offset({ top: positionOfTb.top, left: positionOfTb.left }).css('width', widthofTb + 10);
    $('.food-dropdown').focus();
    $('#hdnFoodTargetTxt').val($(this).attr('id'));
});

$('.food-item').on('click', function (e) {
    e.stopPropagation();
    var targetTxt = '#' + $('#hdnFoodTargetTxt').val();
    $(targetTxt).val($(this).html());
    $(targetTxt).next().eq(0).val($(this).html());
    $('.food-dropdown').addClass('display-none');
});

$(document).on('click', function () {
    $('.food-dropdown').addClass('display-none');
});