2016-05-13 184 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