因此,在我的网络应用程序中,有一个ID为#billing_address_1
的字段。用户可以在此字段中输入他们的地址,也可以从其自动填充中选择一个值,请记住,这不是在浏览器自动填充中构建的。通过另一个脚本倾听价值变化
在另一个js文件中有一个事件监听器,它监听对#billing_address_1
的任何更改。脚本是:
jQuery(function($){
$('#billing_address_1').on('change paste keyup blur', function(){
console.log($(this).val());
});
});
剧本的工作在他们的地址好当用户类型,然而,当用户从自动完成选择一个值,而不是打印所选值从自动完成它的打印的旧值。恩。用户输入band
,然后从自动完成中选择bandung
,它在js控制台中输出band
。
自动完成代码:
jQuery(function($){
$('<div id="addr-find">').appendTo('body').css({
'position': 'absolute',
'display':'none',
'top':'0',
'left':'0',
'padding':'10px',
'background': '#fff',
'box-shadow':'0 0 2px #ccc',
'max-height': '250px',
'overflow-y':'auto'
});
$(document).on('click', function(e){
if($(e.target).parents('#addr-find').length == 0 && e.target.id != 'billing_address_1'){
$('#addr-find').hide();
}
});
$('#billing_address_1').on('focus', function(){
$('#addr-find').show();
});
$('#billing_address_1').on('keyup', function(){
var data = {
action: 'search_address',
addr: $(this).val()
}, $this = $(this), borderWidth = ($this.css('borderWidth').length) > 0 ? parseInt($this.css('borderWidth').replace(/[^\d]/g, '')):0;
var top = $this.offset().top + $this.innerHeight() + borderWidth;
var left = $this.offset().left;
var width = $this.innerWidth() + borderWidth
console.log(top, $this.innerHeight(), borderWidth);
$('#addr-find').css({
"top": top,
"left": left,
"width": width
}).html('Loading...').show();
$.post(AddrFind.ajaxurl, data, function(response){
if(response.length > 0){
lis = [];
for(var i = 0; i < response.length; i++){
lis.push('<li style="border-bottom:1px solid #ddd;padding-bottom:5px;margin-bottom:5px"><a href="#" class="list-addr">'+response[i]+'</a></li>');
}
$('#addr-find').html('<ul style="margin:0;list-style:none">'+lis.join('')+'</ul>').show();
$('body').off('click').on('click', '#addr-find a', function(e){
e.preventDefault();
$this.val($(this).text());
$('#addr-find').hide();
});
}
}, 'json');
});
});
显示这是造成问题的实际代码。如果自动完成的代码是问题然后显示它,我们无法帮助您提供的内容。 –
重点是,如何聆听由ajax或javascript动态变化的输入字段。 –