2015-03-30 10 views
0

У меня есть код jQuery, который отображает div при выборе опции в выпадающем списке. Он работает нормально, но не так, как мне нужно. проблема заключается в том, что при выборе опции страница обновляется, так как есть onchange="submit()" на выбор. Это делает появляется ДИВ около половины второго, а затем снова исчезают, когда страница загруженаПоказывать div при выборе опции. onchange = "submit()" делает его неработоспособным

Пример HTML:

<select onchange="submit()"> 
    <option id="one" value="something">Car</option> 
    <option id="two" value="anything">Plane</option> 
</select> 

<div id="somediv" style="display:none;">This is a string.</div> 

JQuery:

$('select').change(function(){ 
    decide($(this)); 
}); 
var decide = function (elem) { 
    var touch = elem; 
    if (touch.val() === 'anything') { 
    return $('#somediv').css('display', 'block'); 
    } 
}; 

Я хочу дел до будет отображаться, если выбрана опция id="two" и value="anything" и оставаться отображаемой после обновления страницы. Когда пользователь выбирает другой вариант, div исчезает и остается скрытым после обновления страницы. Как я могу достичь этого, пожалуйста? Все ответы были бы весьма признательны.

ответ

1

Вы должны удалить submit() из onclick и представить после вызова функции decide

Что-то вроде:

<select> 
    <option id="one" value="something">Car</option> 
    <option id="two" value="anything">Plane</option> 
</select> 

<div id="somediv" style="display:none;">This is a string.</div> 

JS:

$('select').change(function(){ 
    decide($(this)); 
    $('form').submit(); 
}); 
var decide = function (elem) { 
    var touch = elem; 
    if (touch.val() === 'anything') { 
    return $('#somediv').css('display', 'block'); 
    } 
}; 
+0

Спасибо, я проверил это, но все та же проблема. Любое другое предложение? –

+0

вы удалили 'onchange =" submit() "'? –

+0

Да, я сделал это, а также очистил кеш браузера, но не повезло. –

1

Я хотел бы предложить следующий подход :

// define the function: 
 
function showIfSelected() { 
 
    // 'this' is passed in by jQuery, and is the <select> element, 
 
    // this.options is a NodeList of the <option> elements of 
 
    // the <select>, this.selectedIndex is the index of the selected 
 
    // <option> from amongst that NodeList: 
 
    var opt = this.options[this.selectedIndex]; 
 

 
    // finding all <div> elements with a 'data-showif' attribute: 
 
    $('div[data-showif]') 
 
    // hiding them all: 
 
    .hide() 
 
    // filtering that collection of <div> elements, to find the one 
 
    // whose 'data-showif' attribute shares the value with the <option>: 
 
    .filter('[data-showif=' + opt.value + ']') 
 
    // showing that <div>: 
 
    .show(); 
 
} 
 

 
// binding the showIfSelected() function as the change-event handler: 
 
$('select').on('change', showIfSelected) 
 
// triggering the change event (to show/hide the correct <div> 
 
// on document ready: 
 
.change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select> 
 
    <option id="one" value="something">Car</option> 
 
    <option id="two" value="anything">Plane</option> 
 
</select> 
 

 
<div id="somediv" data-showif="anything">This is a string.</div>

Ссылки:

+0

Благодарим вас за ответ, который частично работает. Он показывает div без отправки выбора, и я должен отправить его вручную. Итак, я должен сделать два ввода вручную, один для выбора и один для всей страницы _ (Остальная часть страницы имеет другие поля) _ Я искал, чтобы автоматически отправлять выбор, а затем показывать div после загрузки страницы, если выбор был вторым вариантом. Это возможно? Надеюсь, ты сможешь мне помочь. Еще раз, спасибо. –

1

Если вы не хотите использовать Ajax для представления данных, вы должны передать выбранное значение через GET/пост или хранить его в сессии/куки затем retrive его при загрузке страницы.

Вместо этого, если вы используете Ajax вы могли бы сделать что-то вроде этого

$('select').change(function(){ 
 
    decide($(this)); 
 
    $('form[name=a]').submit(); 
 
}) 
 

 
var decide = function (elem) { 
 
    var touch = elem; 
 
    if (touch.val() === 'anything') { 
 
     return $('#somediv').css('display', 'block'); 
 
    } 
 
} 
 

 
$('form[name=a]').submit(function(){ 
 
    $('#res').text('Submitted!'); 
 
    
 
    // Put $.ajax to submit your data 
 
    return false; // Commenting this will result in a page refresh 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="a" method="post"> 
 
<select> 
 
    <option id="one" value="something">Car</option> 
 
    <option id="two" value="anything">Plane</option> 
 
</select> 
 
</form> 
 

 
<div id="somediv" style="display:none;">This is a string.</div> 
 
<div id="res"></div>

1

Попробуйте этот код, он может работает.

<option id="one" value="First">Car</option> 
    <option id="two" value="Second" selected="selected">Plane</option> 
</select> 
<div id="div1">This is a string</div> 

JQuery:

$(document).ready(function() { 
     $("select").change(function() { 
      var v = $("select").val(); 
      if (v == "Second") { 
       $("#div1").show(); 
      } 
      else { 
       $("#div1").hide(); 
      } 
     }); 
    }); 
+0

Это работало по-другому, div остается, когда выбран второй вариант, и это то, что я хочу. Но, когда выбрана другая опция, она исчезает меньше секунды (пока страница обновляется), а затем снова появляется. –

+0

По умолчанию будет выбран второй вариант, поэтому после перезагрузки вашей страницы он снова отобразит содержимое div. –

Смежные вопросы