首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jquery在下拉列表中跟踪更改

Jquery在下拉列表中跟踪更改
EN

Stack Overflow用户
提问于 2019-08-24 19:48:17
回答 2查看 321关注 0票数 0

当使用下拉框更改输入框的值时,我希望使用jquery或javascript来跟踪更改。

我给输入框一个firechange类,并尝试使用jQuerychange()事件,但事件根本不触发。

是否有一种方法来检查下拉框选择。

代码语言:javascript
复制
  $('.fieldsWrapper').on('click', '.dlInput', function(e) {
    // e.stopPropagation();
    // load datalist into memory
    var dl = "";
    dl += "<div class='dlOption'>Red</div>";
    dl += "<div class='dlOption'>Yellow</div>";
    dl += "<div class='dlOption'>Green</div>";
    $(".helper").html(dl);
    loadDatalist(dl)
})


function loadDatalist(dl) {
    // $("#helper").width( $("#dlInput").width() );
    $(document).on("click", ".dlInput", function(e) {
        e.stopPropagation();
        // display list if it has value
        var lv = $(".dlInput").val();
        if (lv.length) {
            var os = $(".dlInput").offset();
            $("#orderTypes").attr("id", "orderTypesHide");
            var activeElement = $(document.activeElement)
            var helper = activeElement.next()
            $(helper).show();
            // $('#helper').show()
        }
    });

    $(document).on("click", ".dlOption", function(e) {
        e.stopPropagation();
        $(this).parent().prev('.dlInput').val($(this).html()); //The parent class is the helper and the class before should be the Input box of the class dlInput
        $(".helper").hide();
    });

    $(document).on("change", ".dlInput", function() {
        if ($(this).val() === "") {
            $("#orderTypesHide").attr("id", "orderTypes");
            $(".helper").hide();
        }
    });

}


$('.fireChange').change(function(){
    alert(`Input Event Fired`)
    // addIndividualParts()
})
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class ="fieldsWrapper">
<input list="orderTypes" class="fireChange dlInput" class="form-control fireChange" placeholder="Stage" value="Red">
            <div class="helper"></div>
            <datalist id="orderTypes">
               <option value="Red">
               <option value="Green">
               <option value="Yellow">
            </datalist>
 </div>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-24 21:03:23

当您设置元素的新值(在您的例子中是.dlInput类)时,您需要调用触发器() change jQuery方法。

这里是working jsFiddle:https://jsfiddle.net/r8h3dxoj/6/

因此,我更改的代码行是:

代码语言:javascript
复制
$(this).parent().prev('.dlInput').val($(this).html()).trigger('change');
票数 1
EN

Stack Overflow用户

发布于 2019-08-24 20:19:51

下面介绍的jQuery工作正常(功能与您的相同)。我相信这是可行的,但不是在人们可能期望的时候。

代码语言:javascript
复制
$('.fireChange').change(function(){
    console.log('input value changed.');
});

只有当您从文本输入框中获得焦点后,此更改事件侦听器才会启动。在select下拉列表上,更改甚至会在选项被选中时立即触发,但是由于datalist实际上是作为文本输入上的一组自动完成选项发挥作用的,因此此事件似乎发生得很晚。这可能就是为什么你没有看到它触发。

Docs:根据更改元素的类型和用户与元素的交互方式,更改事件在不同的时刻触发:

  • 当元素在其值更改后失去焦点,但未提交(例如,在编辑了or的值之后)。事件

附带说明:

在html方面,您可能只需要一个class属性。

代码语言:javascript
复制
class="form-control fireChange dlInput" 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57641078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档