Jquery-设置表单选择字段;精选;值仅在刷新后有效

Jquery-设置表单选择字段;精选;值仅在刷新后有效,jquery,forms,select,Jquery,Forms,Select,我想使用一个表单选择字段供用户选择他们的居住国,该字段显示基于IP的国家作为默认值(加上它旁边的IP地址) 位置信息(ipinfo.com)正在运行。我正在将“country”和“ip”传递给函数,函数应该修改select字段和ip地址 问题: IP地址起作用,但选择字段仅在我点击刷新后更新 有人能告诉我为什么吗 下面是代码: HTML 感谢您提供有关如何修复此问题的任何线索 频繁的它是selected=“selected”not selected=“true”,因此: $(this.attr(

我想使用一个表单选择字段供用户选择他们的居住国,该字段显示基于IP的国家作为默认值(加上它旁边的IP地址)

位置信息(ipinfo.com)正在运行。我正在将“country”和“ip”传递给函数,函数应该修改select字段和ip地址

问题: IP地址起作用,但选择字段仅在我点击刷新后更新

有人能告诉我为什么吗

下面是代码:
HTML

感谢您提供有关如何修复此问题的任何线索

频繁的

它是selected=“selected”not selected=“true”,因此:

$(this.attr('selected','selected')


(您也可以跳过
var ipAddress
,只需在下一行中传递
ip

您可以极大地简化循环,让jQuery完成以下工作:

$("#setup_changeCountry option[value$='" + country + "']").attr('selected', true);
确保:

  • 案例匹配(您的国家/地区也必须以大写字母开头)
  • 加载DOM后执行此代码,否则可能会尝试选择一个尚不存在的选项
您应该使用:

 $(document).ready(name_of_function);
这样,您可以运行该功能来选择国家/地区。您可以将此功能用于:

function morph(country,ip){
    var ipAdress = ip;
    $('.ipAdress').text(ipAdress);
    var countryForm = country; 
    $("#setup_changeCountry option[value$='" + country + "']").attr('selected', true);
}

selected
是一个布尔值,而不是属性=值对,因此它正确地表示为
$(this).attr('selected',true)/
$(此).removeAttr('selected')。是的,这是真的(而且比我的版本更正确)。我只是在说(字符串,字符串)类型。谢谢你指出这一点。使用
selected=“selected”
语法是XHTML中XML文档派生(有限)语法的结果。我花了一段时间才弄清楚它实际上也是“true:-)我使用了each(),因为我首先需要“substr”选项值(AL>AL)。你的代码会简单得多,但是我必须编辑所有选项,只显示两个字母(AL)。无论如何,谢谢你提供的信息。@frequency,要么我不理解你,要么你错了。[value^=''查看字符串的第一部分,[value$=''查看字符串的最后一部分。它自己执行substr!帮了大忙。谢谢我需要检查前两个字母,因此它应该是[value^=“”。但是,只有在重新加载页面后才更新字段时,它仍然没有帮助。请确保在$(document).ready()上调用函数,如果这不起作用,那么请确保您的javascript变量在预期时间的位置。尝试将它们记录到控制台,例如,获取它…函数在所有信息(IP、国家)可用和存储之前调用。我在Jquery Mobile中完成了整件事,这意味着(现在)正确设置选择字段被隐藏,并且显示了一个替换按钮,仍然显示第一个选项。也设法纠正了这一点,所以我是一个快乐的露营者。感谢您的输入!
 $(document).ready(name_of_function);
function morph(country,ip){
    var ipAdress = ip;
    $('.ipAdress').text(ipAdress);
    var countryForm = country; 
    $("#setup_changeCountry option[value$='" + country + "']").attr('selected', true);
}