Параметр раскрывающегося меню, чтобы добавить «обязательный» класс в другое раскрывающееся меню, но удалить класс для других параметров при выборе

Мне нужно было, чтобы определенные поля были «обязательными», поэтому я использовал jquery.validate.js и class="required" и т.д.

Единственная проблема заключается в том, что я расширил форму, когда в раскрывающемся списке выбран определенный параметр, сделав скрытый div видимым, используя: Display: None, а затем Display: Block.

Одно из полей в расширенном div должно быть обязательным полем, но если я установлю его как class="required". Для проверки все равно потребуется значение из этого поля, даже если оно скрыто и не требуется.

Итак, мне нужно, чтобы class="required" добавлялся или удалялся или переключался при изменении отслеживаемого ввода выбора, который постоянно появляется в форме.

Вот как я пытался его закодировать, но, похоже, он не работает. Большое спасибо всем, кто может помочь, и я надеюсь, что понял смысл своего объяснения.

Этот первый бит расширяет форму, отображая скрытый элемент div при выборе параметров раскрывающегося списка.

    <script type="text/javascript"> 
    // <![CDATA[ 
    function display(obj,id1,id2,id3) { 
    txt = obj.options[obj.selectedIndex].value; 
    document.getElementById(id1).style.display = 'none'; 
    document.getElementById(id2).style.display = 'none'; 
    document.getElementById(id3).style.display = 'none'; 
    if ( txt.match(id1) ) { 
    document.getElementById(id1).style.display = 'block'; 
    } 
    if ( txt.match(id2) ) { 
    document.getElementById(id2).style.display = 'block'; 
    } 
    if ( txt.match(id3) ) { 
    document.getElementById(id3).style.display = 'block'; 
    }  
    } 
    // ]]> 
    </script> 

    // This is how I have tried to add & remove the required class.

    <script type="text/javascript">

    $('#category').change(function(){
        if ( $('#category').val() =='id1' ) {
        $('#size').addClass('required');
    } else {
        $('#size').removeClass('required');
    }
    }

    </script>


    <html>

    <form class="orderform" action="FormNext.php" method="post" name="OrderForm" id="OrderForm">


    <select id="category" name="category" class="required" onchange="display(this,'id1','id2','id3');">
                                      <option value="">- please select -</option>
                                      <option value="id1">Category1</option>
                                      <option value="id2">Category2</option>
                                      <option value="id3">Category3</option>
    </select>



<div id="id1">

    <select name="size" id="size" class="">
      <option value="">Please Select</option>
      <option value="xsmall">extra small </option>
      <option value="small">small </option>
      <option value="medium">medium</option>
      <option value="large">large </option>
      <option value="xlarge">extra large</option>
    </select>

</div>
    </form>

    </html>

person fred k    schedule 28.02.2013    source источник


Ответы (1)


<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
 <script>  
    function display(obj,id1,id2,id3) { 
        txt = obj.options[obj.selectedIndex].value; 
        document.getElementById(id1).style.display = 'none'; 
        document.getElementById(id2).style.display = 'none'; 
        document.getElementById(id3).style.display = 'none'; 
        if ( txt.match(id1) ) {
            document.getElementById(id1).style.display = 'block'; 
        } 
        if ( txt.match(id2) ) { 
            document.getElementById(id2).style.display = 'block'; 
        } 
        if ( txt.match(id3) ) { 
            document.getElementById(id3).style.display = 'block'; 
        }  
    }

    $(document).ready(function(){
        $('#category').change(function(){
            var selectedValue = $('#category').val();
            $('#size').removeClass('required');
            $('#' + selectedValue + ' > select').addClass('required');
        });
    });
    </script>
</head>
<body>

<form class="orderform" action="FormNext.php" method="post" name="OrderForm" id="OrderForm">


<select id="category" name="category" class="required" onchange="display(this,'id1','id2','id3');">
    <option value="">- please select -</option>
    <option value="id1">Category1</option>
    <option value="id2">Category2</option>
    <option value="id3">Category3</option>
</select>



<div id="id1" style="display:none">

    <select name="size" id="size" class="">
        <option value="">Please Select</option>
        <option value="xsmall">extra small </option>
        <option value="small">small </option>
        <option value="medium">medium</option>
        <option value="large">large </option>
        <option value="xlarge">extra large</option>
    </select>

</div>
<div id="id2" style="display:none">

    <select name="size" id="size" class="">
        <option value="">Please Select</option>
        <option value="xsmall">extra small </option>
        <option value="small">small </option>
        <option value="medium">medium</option>
        <option value="large">large </option>
        <option value="xlarge">extra large</option>
    </select>

</div>
<div id="id3" style="display:none">

    <select name="size" id="size" class="">
        <option value="">Please Select</option>
        <option value="xsmall">extra small </option>
        <option value="small">small </option>
        <option value="medium">medium</option>
        <option value="large">large </option>
        <option value="xlarge">extra large</option>
    </select>

</div>
</form>

Я предполагаю, что вы пропустили # для размера и категории. попробуй и дай мне знать

# используется для выбора по идентификатору и . используется для выбора тега по имени класса, и если вы хотите выбрать элемент, то он упоминается напрямую.

Like this
$('#id').doStuff();
$('.className').doStuff();
$(div).doStuff();
$('[name="ElementNameHere"]').doStuff();
person 1Mayur    schedule 28.02.2013
comment
Также есть небольшая проблема с правилом проверки. Элемент select всегда имеет значение, поэтому всегда будет соответствовать требуемому условию. Вы можете добавить в ...val() !== - person darronz; 28.02.2013
comment
Я менял его много раз, поэтому в своем посте не понял, что вызов id, класса или самого элемента может быть несогласованным. Возможно, поэтому он не работает, но я пытаюсь выяснить, какой из них я должен вызывать, чтобы он работал. Я новичок в кодировании, поэтому прошу прощения, если я мало что понимаю. Этот javascript выглядит близко к работе в отношении вопроса и результата выше. - person fred k; 28.02.2013
comment
о... надо пройти в таком случае - person 1Mayur; 28.02.2013
comment
в ответ на darronz Разве это не нормально, просто дать первой опции в меню значение =, потому что это, кажется, работает с первым из двух меню выбора, это остановит отправку формы, если оставить ее на первой опции, как это эквивалентно пустое значение. - person fred k; 28.02.2013
comment
Теперь я изменил код javascript, чтобы он вызывал только #id входных данных. Все еще не работает. - person fred k; 28.02.2013
comment
Спасибо за помощь. Насколько я понимаю, код должен работать. Это оператор IF, который говорит, что если значение #category равно 'id1', добавьте требуемый класс к #size, в противном случае удалите требуемый класс. Что еще может помешать? Или он должен быть закодирован по-другому. - person fred k; 28.02.2013
comment
прежде всего код плохо структурирован, вам нужно поработать над этим, я пытаюсь решить вашу проблему, скоро дам вам знать - person 1Mayur; 28.02.2013
comment
сохраните это как файл html и посмотрите - person 1Mayur; 28.02.2013
comment
Это не мой полный код страницы, поэтому я понимаю, что он, скорее всего, вообще не будет работать, поскольку не включает часть проверки и полную форму, но я предположил, что проблему можно было бы легко обнаружить в моем кодировании javascript для addClass и Функция удаления класса. Я могу опубликовать сценарий проверки, если это необходимо, возможно, его можно установить как правило: поле размера должно быть обязательным: true IF .... Не знаю, возможно ли что-то подобное. - person fred k; 28.02.2013
comment
Я надеюсь, что решение решило вашу задачу, теперь вы можете двигаться вперед отсюда. - person 1Mayur; 28.02.2013
comment
спасибо за попытку SirwaniMayur. Я буду искать другие примеры похожих функций, которые помогут решить проблему. - person fred k; 28.02.2013
comment
но проблема решена, то, что вы просили, было сделано, Фред - person 1Mayur; 28.02.2013
comment
ах, извините, я пропустил это, и большое спасибо, я проверю это сейчас. - person fred k; 28.02.2013
comment
я еще не уверен. Я еще не заставил его работать с моим полным кодом с кнопкой отправки и т. Д., Но я дам вам знать. Проверьте позднее. Похоже, он должен работать и, очевидно, намного лучше структурирован. Спасибо. - person fred k; 28.02.2013
comment
Я бы хотел, но только недавно зарегистрировался здесь, и у меня еще недостаточно очков репутации, чтобы проголосовать. - person fred k; 28.02.2013