2016-05-13 182 views
0

我有一种情况,我需要使用jQuery来初始化select中的选定选项(国家/地区下拉列表中的美国)。不幸的是,由于平台的限制,我无法在HTML中设置它,并且没有任何类或ID可以定位。此表单也基于ajax进行更改(基于该用户是否为访客,在签出时注册或已经注册,同一表单有3个版本)。目前剧本我创作的作品,但不会让你改变到另一个国家:使用jQuery选择的设置选项

$(document).ajaxSuccess(function() { 
    $('option:contains("United States"):not(:contains("Minor"))').prop("selected", true); 
}); 

所以基本上同时将其设置为选择,它不允许用户从美国的选择而改变。看起来Ajax可能会在每次为任何原因设置选项时重新加载。

谢谢!

+0

您无法打开下拉菜单吗?下拉列表中没有其他内容吗?或者它不会从下拉列表中保存选定的项目? – amflare

+0

@amflare我可以打开它,所有的选项都在那里,我可以选择一个新的国家,但是这个选择不会保留,它会立即返回被选中的美国。 –

+0

@amflare,这是目前菜单中唯一的下拉菜单(如果美国选择正常,状态选项从文本框更改为下拉菜单,到目前为止它没有这样做与美国预选),似乎表格正在重新加载或在Dropbox中选择了某些内容时,可能会触发'ajaxSuccess',导致它重新从头重新选择美国国家。 –

回答

0

因此,根据评论,似乎每次尝试更改下拉列表时,都会调用更多的AJAX。这又会调用你的$ .ajaxSuccess函数。这意味着它会在每一次AJAX调用中重置!

你可以做这样的事情:

var set = false; 
$(document).ajaxSuccess(function() { 
    if (set) return; 
    $('option:contains("United States"):not(:contains("Minor"))').prop("selected", true); 
    set = true; 
}); 

或者,你可以采取传递给ajaxSuccess的参数优势,以确定是否代码应该甚至可以运行。例如:

$(document).ajaxSuccess(function(event, xhr, options) { 
    if (xhr.url !== 'the url im listening for') return; 
    $('option:contains("United States"):not(:contains("Minor"))').prop("selected", true); 
}); 

这种做法只会如果你正在听的过程中的一个特定URL工作,但你的想法。只需确保ajaxSuccess函数仅当需要时即可。

+0

'if(!set){//其他两行代码}'是一个更直观的触摸。但是,是的,我已经做了很多次。它效果很好。 – amflare

+0

第一块完美地工作。一个简单的答案,我敢肯定,我会恨自己后来不自己想出来的。谢谢! –

+0

@amflare也许,不同的笔画为不同的男孩:) – aaronofleonard