检查多个选择框中的选项

发布于 2024-11-29 23:37:48 字数 1641 浏览 0 评论 0原文

我正在尝试找到一种方法来检查不同选择框中的选项(总计:4)。 这些框在值/文本中包含相同的数据。

如何避免选项选择相同? (我用它来实现排序功能)。 我如何将它集成到当前的 jquery 脚本中。 (我使用ajax-post来解析数据)。

事情不应该是这样的: 在此处输入图像描述

选择一个:

<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');
        });
    }   
}
}

I'm trying to find a way to check my options in different select boxes (total: 4).
The boxes include the same data in value/text.

How do I avoid that the option select is the same? (I use it for an sorting feature).
And how can i integrate it in the current jquery script. (I use ajax-post to parse data).

This is how it should not be:
enter image description here

Select one:

<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>

Select two

<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');
        });
    }   
}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

她如夕阳 2024-12-06 23:37:48

我想知道这是否是您所追求的: 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');
            });
        }
    }
}

I wonder whether this is what you are after: http://jsfiddle.net/william/K7nTr/.

It checks whether the value has already been selected. If it has, revert to the first value and alert the user.

$.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');
            });
        }
    }
}
回忆那么伤 2024-12-06 23:37:48

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');
        });
    }   
}   

In onchange="$.modules.options('modul1',1);" you dont have to pass modul1, you can just pass this which will point to the changing select box. This applies to both the select boxes. You have few js error in your code, try this.

$.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');
        });
    }   
}   
老街孤人 2024-12-06 23:37:48

我不确定我是否理解。在html中,替换jquery中的onChange

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

,替换:

    options: function(module){

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

并替换

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

if( modul.length > 0) {

I'm not sure I understand. in html, replace the onChange

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

in jquery, replace:

    options: function(module){

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

and replace too

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

by

if( modul.length > 0) {
要走干脆点 2024-12-06 23:37:48

试试这个

 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');
}
}

try this

 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');
}
}
一身仙ぐ女味 2024-12-06 23:37:48

不确定我是否在这儿找到你了。
但我的以下示例允许每个选项仅选择一次。

<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>

Not sure if i got you right here.
But my following example allows each option to be selected only once.

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文