Jquery 如何捕获仅当a<;的值;选择>;通过用户输入进行更改?

Jquery 如何捕获仅当a<;的值;选择>;通过用户输入进行更改?,jquery,Jquery,对于普通选择列表,我有以下代码: $('.update-title') .change(function () { var title = $('option:selected', this).prop('title'); $("#modal_Title").val(title); }); 这似乎是在填充select时触发的。是否只有当用户进入并手动重新选择不同的值时,我才能做到这一点?您的代码完全正确,但

对于普通选择列表,我有以下代码:

   $('.update-title')
        .change(function () {
            var title = $('option:selected', this).prop('title');
             $("#modal_Title").val(title);
        });

这似乎是在填充select时触发的。是否只有当用户进入并手动重新选择不同的值时,我才能做到这一点?

您的代码完全正确,但语法错误除外。删除语法错误

工作

$('.update-title')
        .change(function () {
            var title = $('option:selected', this).prop('title');
             $("#modal_Title").val(title);//you are missing quotes
        });

除了语法错误外,您的代码完全正确。删除语法错误

工作

$('.update-title')
        .change(function () {
            var title = $('option:selected', this).prop('title');
             $("#modal_Title").val(title);//you are missing quotes
        });

您可以使用布尔值来确定事件是否首次触发。例如,您的代码可以是这样的

var first_time_select = true;
$('.update-title')
    .change(function () {
        if (first_time_select) {
            first_time_select = false;
        } else {
            var title = $('option:selected', this).prop('title');
            $("#modal_Title").val(title);
        }
});

您可以使用布尔值来确定事件是否首次触发。例如,您的代码可以是这样的

var first_time_select = true;
$('.update-title')
    .change(function () {
        if (first_time_select) {
            first_time_select = false;
        } else {
            var title = $('option:selected', this).prop('title');
            $("#modal_Title").val(title);
        }
});

并非如此,但当您以编程方式更改选择框时,始终可以将数据指定给它。然后检查是否设置为“更改”:

$('#mybutton').on('click', function() {
    $('.update-title').data('dont-change', 1);
    // repopulate the dropdown here...
});

$('.update-title')
    .change(function () {
        if (!$(this).data('dont-change')) {
            var title = $('option:selected', this).prop('title');
             $("#modal_Title").val(title);//you are missing quotes
        } else {
            $(this).removeData('dont-change');
        }
    });

并非如此,但当您以编程方式更改选择框时,始终可以将数据指定给它。然后检查是否设置为“更改”:

$('#mybutton').on('click', function() {
    $('.update-title').data('dont-change', 1);
    // repopulate the dropdown here...
});

$('.update-title')
    .change(function () {
        if (!$(this).data('dont-change')) {
            var title = $('option:selected', this).prop('title');
             $("#modal_Title").val(title);//you are missing quotes
        } else {
            $(this).removeData('dont-change');
        }
    });

change
事件仅在元素获得焦点、值更改以及元素失去焦点时由浏览器触发。最初填充元素时不会发生这种情况,我个人也从未遇到在最初填充
时触发的
更改事件


您似乎在某个地方有一些代码以编程方式触发该元素上的更改事件处理程序,因为您所描述的不是标准行为。

只有当元素获得焦点、值更改并且元素失去焦点时,浏览器才会触发
更改事件。最初填充元素时不会发生这种情况,我个人也从未遇到在最初填充
时触发的
更改事件


您似乎在某个地方有一些代码以编程方式触发该元素上的更改事件处理程序,因为您所描述的不是标准行为。

我不确定在您使用数据填充select时触发其更改事件的确切原因(我注意到类似的情况发生在敲除上)。但是,如果您想避免触发它,为什么不在更改元素时在元素上使用
.off()
(),然后使用
.on(回调)
再次激活它?(我建议使用命名函数而不是内联函数进行此操作。)

下面是一个人为的例子:

请注意,在该示例中,我实际上不需要使用on/off,因为它不会触发
change
事件,但我想您已经明白了


编辑:出于好奇,您何时以及如何填充选择列表?

我不确定当您使用数据填充选择列表时,为什么会触发选择的更改事件(我注意到类似的情况发生在敲除中)。但是,如果您想避免触发选择列表,为什么不使用
.off()
()当您更改元素时,在元素上,然后在(回调)
上再次激活它?(我建议使用命名函数而不是内联函数执行此操作。)

下面是一个人为的例子:

请注意,在该示例中,我实际上不需要使用on/off,因为它不会触发
change
事件,但我想您已经明白了


编辑:出于好奇,您何时以及如何填充选择列表?

您对错误的看法是正确的,但这不是他的问题的解决方案。应该是一个注释。@sibu-这是我在Stackoverflow中键入的错误。您给出的上述代码仍然与问题中的问题相同。Anders-谢谢您的编辑。@Marilou您能发布吗编码您的选择是如何获得的populated@Sorry关于这一点。Anthony是正确的。有一个事件触发了一个更改,导致了问题。感谢您的帮助。您对错误的看法是正确的,但这并不是他的问题的解决方案。应该是一个注释。@sibu-这是我在Stackoverflow中键入的错误。上面的代码是您忽略的e仍然存在与问题中相同的问题。Anders-谢谢您的编辑。@Marilou您能发布代码说明您的选择是如何得到的吗populated@Sorry关于这一点,安东尼是正确的。有一个事件发生了改变,导致了问题。谢谢你的帮助。谢谢我会调查的。谢谢我会调查的。我的巨大失误e、 我发现代码正在发送一个更改触发器。非常感谢你的建议。听到这个消息很高兴-通常是我们自己而不是代码做错了…:)我的大错。我发现代码正在发送更改触发器。非常感谢您的建议。很高兴听到您这么说-通常是我们自己而不是代码做错了…:)