2017-03-13 17 views
11

Tôi đang thực hiện đăng ký và tôi có các trường cho quốc gia và tiểu bang.Tùy chọn chọn vẫn được chọn sau khi gửi/làm mới

Vấn đề của tôi là quốc gia và trạng thái mà tôi chọn không giữ lại sau khi gửi.

Tôi cố gắng này

<script type="text/javascript"> 
    document.getElementById('country').value = "<?php echo $_POST['country'];?>"; 
</script> 

nhưng đã không làm việc.

vì vậy tôi cố gắng một lựa chọn sử dụng sessionStorage

$(function() { 
    $('#country').change(function() { 
     sessionStorage.setItem('todoData', this.value); 
    }); 
    if(sessionStorage.getItem('todoData')){ 
     $('#country').val(sessionStorage.getItem('todoData')); 
    } 
}); 
</script> 

Nó làm việc trên đất nước nhưng không phải trong tiểu bang, các lựa chọn vẫn là tùy chọn mặc định.

Làm cách nào để khắc phục điều đó .. hoặc có tùy chọn khác để làm cho nó hoạt động.

cảm ơn.

MẪU MÃ

JSFIDDLE

+0

Bạn kiểm soát mối quan hệ quốc gia-nhà nước như thế nào? Tôi nghĩ đó là vấn đề thực sự. Kiểm soát của bạn sẽ có thể khởi tạo lựa chọn với giá trị mặc định hoặc giá trị hiện tại của bạn. Làm việc với HTML5 localStorage sẽ mang lại sự cố cho bạn trong các trình duyệt cũ hơn. https://www.w3schools.com/html/html5_webstorage.asp –

+0

Vui lòng cung cấp tất cả mã có liên quan trong [mcve] trong chính câu hỏi đó, không chỉ trên trang web của bên thứ ba. Tiền thưởng không công bằng với những người không thể đến jsfiddle.net ... –

+0

Mã quá dài ... đó là lý do tại sao tôi đặt nó ở đó –

Trả lời

9

Dưới đây là một ví dụ làm việc của các chức năng mà bạn mong muốn. Tôi đang sử dụng localStorage như người trả lời trước tôi.

https://jsfiddle.net/a0uj5d86/2/

//handle select changes, put new data in storage 
document.getElementById('country').onchange = function() { 
    console.log('country change'); 
    localStorage.setItem('country', this.value); 
    populateStates('country', 'state'); 
}; 
document.getElementById('state').onchange = function() { 
    localStorage.setItem('state', this.value); 
}; 
document.getElementById('country2').onchange = function() { 
    localStorage.setItem('country2', this.value); 
}; 

Sau đó, ở các nước populate ở cuối tôi có một Diddy ít mà đi

var selection = 'USA'; 
if (localStorage.getItem(countryElementId)) { 
    console.log('found ' + countryElementId + ' in storage = ' + localStorage.getItem(countryElementId)); 
    var selection = localStorage.getItem(countryElementId); 
} 
//select our country (default USA, or local storage if applicable) 
findAndSelect(countryElementId, selection); 
if (countryElementId == 'country') { 
    //we just populated country, now populate states 
    populateStates(countryElementId, stateElementId); 
    if (localStorage.getItem(stateElementId)) { 
    //if weve got a state to select, select it 
    findAndSelect(stateElementId, localStorage.getItem(stateElementId)); 
    } else { 
    findAndSelect(stateElementId, 'Alabama'); 
    } 
} 

Tôi cũng đã làm một số tỷ lệ cược-n-kết thúc refactoring để mã bạn đã có. Cung cấp cho nó một cái nhìn và lấy lại cho tôi với bất kỳ câu hỏi!

+0

cảm ơn bạn sir nó làm việc. nhưng quốc gia mặc định là Hoa Kỳ không hoạt động –

+0

Ah vâng, tôi đã thực hiện phần Hoa Kỳ. [Điều này nên sửa chữa nó] (https://jsfiddle.net/a0uj5d86/1/) – Bango

+0

các tiểu bang theo quốc gia Hoa Kỳ không hiển thị thưa ông –

2

được bạn cho phép sử dụng HTML5 lưu trữ địa phương?

var selectedVal = localStorage.getItem('selectedVal'); 
    if (selectedVal){ 
     $('#mySelect').val(selectedVal) 
    } 

đây là một fiddle http://jsfiddle.net/jvso1Lcc/22/

+0

vâng thưa ông, nhưng nó chỉ hoạt động trên đất nước –

Các vấn đề liên quan