отметьте опции в нескольких полях выбора - PullRequest
4 голосов
/ 17 августа 2011

Я пытаюсь найти способ проверить мои параметры в разных полях выбора (всего: 4). Поля содержат одинаковые данные в значении / тексте.

Как мне избежать, чтобы опция выбора была такой же? (Я использую это для функции сортировки). И как я могу интегрировать его в текущий скрипт jquery. (Я использую ajax-post для разбора данных).

Так не должно быть: enter image description here

Выберите один:

<ul>
<li class="move-img">
<select style="width:150px;"id="modul1" onchange="$.modules.options(this,1);">
<option value="0"></option>
<option value="1">name</option>
<option value="2">name2</option>
</select>
</li>

Выберите два

<ul>
<li class="move-img">
<select style="width:150px;"id="modul2" onchange="$.modules.options(this,2);">
<option value="0"></option>
<option value="1">name</option>
<option value="2">name2</option>
</select>
</li>

JQuery

$.modules = {

/*  Get price for option-modules */
options: function(module_id,show_divid){

    var modul = $(module_id).val();

    if(modul != 0){     
        //show price 
        $("#showprice"+show_divid).html('<div class="ajax_loader left"></div>').fadeTo(300,0.25,function(){

            var $show_price = $(this); // div tag

            $.post('/ajax/modules/get_prices/',{check_data:'send_data',get_module_prices_id:modul},function(data){
                $show_price.fadeTo(200,100,function(){

                    $show_price.html(data.module_price);
                });
            },'json');
        });
    }   
}
}

Ответы [ 5 ]

1 голос
/ 26 августа 2011

Интересно, это то, что вы ищете: http://jsfiddle.net/william/K7nTr/.

Проверяет, было ли уже выбрано значение.Если это так, вернитесь к первому значению и предупредите пользователя.

$.modules = {

    /*  Get price for option-modules */
    options: function(module_id, show_divid) {

        var modul = $(module_id).val();

        if (modul != 0) {
            var selector = ".move-img option:selected[value=" + modul + "]";
            if ($(selector).length > 1) { // see if this value has been selected elsewhere
                alert('The value has been selected. Try again');
                $('option:eq(0)', module_id).attr('selected', 'selected');
                return;
            }

            //show price
            $("#showprice" + show_divid).html('<div class="ajax_loader left"></div>').fadeTo(300, 0.25, function() {

                var $show_price = $(this); // div tag
                $.post('/ajax/modules/get_prices/', {
                    check_data: 'send_data',
                    get_module_prices_id: modul
                }, function(data) {
                    $show_price.fadeTo(200, 100, function() {

                        $show_price.html(data.module_price);
                    });
                }, 'json');
            });
        }
    }
}
1 голос
/ 17 августа 2011

В onchange="$.modules.options('modul1',1);" вам не нужно передавать modul1, вы можете просто передать this, что будет указывать на изменяющийся блок выбора.Это относится к обоим полям выбора.В вашем коде несколько ошибок js, попробуйте это.

$.modules = {

/*  Get price for option-modules */
options: function(module_id,show_divid){

    var modul = $(module_id).val();

    if(modul != 0){
        //show price 
        $("#showprice"+show_divid).html('<div class="ajax_loader left"></div>').fadeTo(300,0.25,function(){

            var $show_price = $(this); // div tag

            $.post('/ajax/modules/get_prices/',{check_data:'send_data',get_module_prices_id:modul},function(data){
                $show_price.fadeTo(200,100,function(){

                    $show_price.html(data.module_price);
                });
            },'json');
        });
    }   
}   
0 голосов
/ 24 августа 2011

Не уверен, что получил тебя прямо здесь.Но мой следующий пример позволяет выбирать каждую опцию только один раз.

<script language="javascript" type="text/javascript">
    var ValidateOptions = function (module) {
        var selectedValue = $('option:selected', module).attr('value');
        var collectionWithoutCurrent = $('.move-img select').not(module);

        $('option').show();

        collectionWithoutCurrent.each(function () {
            $(this).children('option[value="' + selectedValue + '"]').toggle();
        });
    };
</script>
<ul>
    <li class="move-img">
        <select style="width: 150px;" id="modul1" onchange="ValidateOptions($(this))">
            <option value="0"></option>
            <option value="1">name</option>
            <option value="2">name2</option>
        </select>
    </li>
</ul>
<ul>
    <li class="move-img">
        <select style="width: 150px;" id="modul2" onchange="ValidateOptions($(this))">
            <option value="0"></option>
            <option value="1">name</option>
            <option value="2">name2</option>
        </select>
    </li>
</ul>
0 голосов
/ 23 августа 2011

попробуйте

 var inputs = document.getElementsByTagName("input"); //or document.forms[0].elements;  
   var cbs = []; //will contain all checkboxes  
   var checked = []; //will contain all checked checkboxes  
 for (var i = 0; i < inputs.length; i++) {  
  if (inputs[i].type == "checkbox") {  
   cbs.push(inputs[i]);  
   if (inputs[i].checked) {  
     checked.push(inputs[i]);  
   }  
 }  
}  
var nbCbs = cbs.length; //number of checkboxes  
var nbChecked = checked.length; //number of checked checkboxes  

for(var i=0;i<checked.length;i++)
{
if(checked[i].value=checked[i+1].value)
{
alert('Not allowed');
}
}
0 голосов
/ 17 августа 2011

Я не уверен, что понимаю. в html заменить onChange

onchange="$.modules.options(this);"

в jquery, замените:

    options: function(module){

var modul = $("option:selected", module).val();

и заменить тоже

if(modul.length == 0);
    else{

по

if( modul.length > 0) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...