Javascript 从选择中的上一个选项获取数据,以及从当前选项获取数据
所以我知道JavaScript中的作用域可能有点不稳定,我尝试了一些不同的方法,包括将变量声明附加到窗口(即window.var),并在函数的不同部分内外声明变量,但都没有用。以下是我得到的:Javascript 从选择中的上一个选项获取数据,以及从当前选项获取数据,javascript,jquery,scope,Javascript,Jquery,Scope,所以我知道JavaScript中的作用域可能有点不稳定,我尝试了一些不同的方法,包括将变量声明附加到窗口(即window.var),并在函数的不同部分内外声明变量,但都没有用。以下是我得到的: $(".some_field").on('focus', function () { // Store the previous option value before the change prev = String($(":selected", $(this)).data('opti
$(".some_field").on('focus', function () {
// Store the previous option value before the change
prev = String($(":selected", $(this)).data('option_id'));
}).change( function() {
alert(prev); // alerts '4'
current = String($(":selected", $(this)).data('option_id'));
alert(current) // alerts '5'
alert(prev); // alerts '5' ..... it should alert '4'
});
本质上,在change函数中,我需要同时使用前面和当前选项id来执行操作,而不是使用全局,我建议使用旧的值数据属性来装饰输入 试试这个: 例如:
$(".some_field").on('focus', function () {
$(this).data('oldValue', $(this).data('option_id'));
}).change(function () {
alert("Old value on focus was: " + $(this).data('oldValue'));
alert("Current option_id value: "+$(this).data('option_id'));
});
您需要使用一个变量/属性来存储每个元素的上一个值。全局变量没有帮助。实际上,您甚至不需要这些
焦点事件
$(".some_field").each(function () {
$(this).data('id_value', $(":selected", this).data('option_id'));
}).change(function(e) {
var previous = $(this).data('id_value'),
current = $(":selected", this).data('option_id');
alert(…); // or whatever
$(this).data('id_value', current);
});
以@Scott的回答为指导,这就是最终对我有用的东西。我使用父元素来存储数据@不过,伯吉的答案也很有效
$(".some_field").on('focus', function () {
// Store the previous option value before the change
$(this).parent().data('prev_option_id', $(":selected", $(this)).data('option_id'));
}).change( function() {
current = String($(":selected", $(this)).data('option_id'));
alert("Old value on focus was: " + $(this).parent().data('prev_option_id'));
alert("Current option_id value: "+current);
});
prev_option_id和option_id是相同的,因为您正在为这两个选项分配相同的id…是的,您是对的。。。我开始意识到这不是一个范围问题。。。但是,我仍然不确定如何获得所需的功能字符串($(this).data('option_id'))
??我的意思是,当您聚焦一个元素时,选择一个选项,然后聚焦下一个元素,第二个元素上的焦点
可能在第一个元素上的更改
之前触发。因此@Bergi我做了一些故障排除,您对问题的回答肯定是正确的,但是如果我多次更改,您建议的解决方案将无法正常工作。除非我认为这是错误的,在哪种情况下,你愿意在评论之外发布一个更正式的回答呢。。。我需要它更改为的选项id和它更改为的选项id。这就是为什么on(‘focus’)从句在这里开头。哦,我明白了。我更新了答案,将上一个值存储在另一个数据属性中。这也避免了全局变量。我们离这里越来越近了。。。问题是在您的第一个警报中,该行中的$(this)未定义为引用新选择的选项,其中“oldValue”数据存储在我们现在已丢失的上一个选项中。。。您的小提琴使用的是输入元素,请记住我们在这里讨论的是选择元素。