راکت

مشکل در multiple select در جی کوئری

10 پاسخ

سلام دوستان من یک multiple select دارم و میخام اگر کاربری option با value =1 را انتخاب کرد ,نتونه option با value=5 را انتخاب کنه یا بالعکس یعنی در نظر گرفتم که با ویژگی disabeled درست کنم .

پدرما در آورده ,هرکی میدونه کمک کنه لطفا😑😑😑😑😑

<body>
    <label for="one" data-value="1">Enter One</label>
    <br/>
    <select class="selectpicker" name="privileges[]" multiple id="test" >
        <option value="1" >آب مجزا </option>
        <option value="2" >برق مجزا </option>
        <option value="3">گاز مجزا</option>
        <option value="4">تلفن</option>
        <option value="5">آب مشترک</option>
        <option value="6">برق مشترک</option>
        <option value="7">گاز مشترک</option>

    </select>
</div>

</body>
<script>
    $('.selectpicker').selectpicker();
</script>
<script>
    $('test').change(function(){
        var values = $(this).val();
        if (val == '1') {
            $('option[value="5").attr('disabled', true);

        }

    });

</script>
ثبت پرسش جدید

پاسخ‌ها

10
سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

@mpoorkamaly سلام .
توی شرطتون val رو مقایسه کردین که اشتباهه .شما با هربار تغییر مقدار رو میریزین داخل متغییر values پس باید واسه شرطتون values رو مقایسه کنید . به این صورت :

 $('test').change(function(){
        var values = $(this).val();
        if (values == '1') {
            $('option[value="5").attr('disabled', true);

        }

    });

و اینکه شما المنت رو هم اشتباه انتخاب کردین .
میخواین بر اساس آیدی سلکت رو انتخاب کنید پس اینجا باید به اینصورت عمل کنید :

 $('#test').change(function(){ ...

توی اینجور موارد inspect elemets بگیرید و داخل console ارور هارو بخونید
اشتباهات رو جدا جدا توضیح دادم که متوجه بشید .
موفق باشید

melissa
melissa
@mpoorkamaly

@SobhanDadkhah
ممنون از پاسختون ,گزینه هایی که فرمودید را درست کردم ,ولی متاسفانه بازهم درست نشد و جواب نمیده ,اصلا هیچ کاری نمیکنه .توی قسمت کنسول هم که اصلا خطایی نداره تا چک کنم. واقعا پدرما درآورده

شاید پاسخ شما همین‌جا باشد

سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

@mpoorkamaly
البته شما multiple دارین یعنی ممکنه چنتا مورد رو سلکت کنید و اونموقع باید با حلقه شرط رو برای تک تک مقادیر تست کنید .
اما فعلا این کد رو تست کنید و فقط مورد اول رو انتخاب کنید ببینید جواب میده ؟

<script>
    $('#test').change(function(){
        var value = $(this).val();
        if (value == 1) {
            $("#test option[value='5']").attr('disabled', true);
        }
    });
</script>
melissa
melissa
@mpoorkamaly

@SobhanDadkhah
این کدم جواب نداد اصلا .
اگه توی آرایه valu ها را قرار بدم و بعد بگم اگر valu =1 پیدا کرد val 5 ,disabaled کن ,این درسته ؟؟ ولی نمیدونم چه شکلی باید بگم این دستورا

سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

@mpoorkamaly سلام.
بله اون مورد رو باید با آرایه واسه وقتی چندین سلکت میخواین انجام بدین و نظیرشون چندین گزینه غیرفعال کنید، در نظر بگیرید .
ولی این کد رو من تست کردم و مشکلی نداشت. عجیبه که واسه شما کار نمیکنه !
این هم کل کد تست .

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
    <title>Document</title>
  </head>
  <body>
    <select name="test" id="test" multiple>
      <option value="1">Option 1</option>
      <option value="2">Option 2</option>
      <option value="3">Option 3</option>
      <option value="4">Option 4</option>
      <option value="5">Option 5</option>
    </select>
    <script>
      $("#test").change(function () {
        var value = $(this).val();
        if (value == 2) {
          $("#test option[value=5]").attr("disabled", true);
        }
      });
    </script>
  </body>
</html>

حتما نتیجه رو اعلام کنید . موفق باشید.

melissa
melissa
@mpoorkamaly

@SobhanDadkhah
این کد برای من جواب نداد ,البته من دارم در لاراول این کدا میزنم
من میخام وقتی کاربر آب مشترک انتخاب کرد ,نتونه آب مجزا رم انتخاب کنه یا گاز مشترک زد نتونه گاز مجازم انتخاب کنه یا حتی برق مشترک و برق مجزا
من این کد را پیدا کردم

<script type="text/javascript">
    $("select").change(function() {

        if ($("select option:selected").selectpicker('val', ['1'])){

            $("#test").find('[value=5]').attr('disabled', 'disabled');

           $("#test").selectpicker('refresh');
        }
        else ($("select option:selected").selectpicker('val', ['5']))

        $("#test").find('[value=1]').attr('disabled', 'disabled');

        $("#test").selectpicker('refresh');

    });

</script>

اما یک مشکلی که هست این کدا برا برق و گازم که می نویسم ,اون گزینه هارم غیرفعال میکنه
فکر کنم باید از آرایه استفاده کنم یک گزینه هم پیدا کردم array.find اما جواب نداد

کد هم به این شکله :

<script>
    var array = [1,2,3,4,5,6,7];

    var found = array.find('1');

             $("#test").find('[value=1]').attr('disabled', 'disabled');

                $("#test").selectpicker('refresh');

</script>

اگه آرایه را پیدا کنه و بعد disabledکنه فکر کنم درست بشه؟؟؟؟

سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

@mpoorkamaly

اما یک مشکلی که هست این کدا برا برق و گازم که می نویسم ,اون گزینه هارم غیرفعال میکنه

قاعدتا نباید غیر فعال کنه یجایی احتمالا اشتباهی دارید که موردی رو که نیاز ندارین غیر فعال میکنه . البته این کد خیلی طولانی میشه و بهینه نیست .
برای مورد دوم میتونید از تابع inArray() استفاده کنید به اینصورت که وقتی گزینه هارو انتخاب میکنید مثلا مقدارشونو به آرایه push کنید و بعد با شرط چک کنید اگر داخل آرایه مقادیری که مورد نظرتونه وجود داره ، بیاد و آپشن متضادشو غیر فعال کنه. که البته باید برای زمانی که از حالت سلکت درمیان هم در نظر بگیرید . ( چون وقتی آپشن انتخاب شده رو از انتخاب در بیارین باید مقدارش از آرایه حذف بشه)
برای این موارد اول باید تحلیل خوبی روی موضوع داشته باشین (سناریوی درست رو درک کنید ) و همچنین درک خوبی از جی کوئری و جاوا اسکریپت نیازه چون هرچقدر مسلط تر باشید بهینه تر و بدون باگ کد میزنید . با روش آزمون و خطای الان هم میشه جلو رفت ولی قطعا مشکلاتی رو بوجود میاره در آینده.

melissa
melissa
@mpoorkamaly

@SobhanDadkhah
برای اون کدهام یک alert که گرفتم مشکل اینجا که هر گزینه را انتخاب میکنیم میره جز این آلرت یعنی آب مشترک انتخاب میکنیم valu 1 میره تو جدول آب جدا را انتخاب می کنیم میره توی این alert ها ونمیدونم باید چجوری از این کار جلوگیری کنم.
ممنون از راهنمایتتون🙏🙏

سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

@mpoorkamaly
اگر منظورتون اینه که چون مولتی سلکت هست اگر چنتا هم سلکت کنید مقدار اولی رو فقط برمیگردونه واسه این تیکه از کدتونه :

if ($("select option:selected").selectpicker('val', ['1'])){

کلا این حالت selected برای وقتی هست که یدونرو سلکت میکنید . شما تو سلکت چندتایی وقتی به اینصورت بذارین مثلا اگر شماره یک رو اول انتخاب کردین و با نگه داشتن کلید کنترل چندتای دیگرو هم انتخاب کنید هربار میره و مقدار اولین آپشنی که انتخاب شده رو برمیگردونه .
اما وقتی به این صورت بنویسید :

$('select').val();

این کد مقدار تمام آپشن هایی که سلکت شده رو براتون بصورت آرایه برمیگردونه و میتونید هر بلایی که بخواین سرش بیارین . با لاگ گرفتن کامل متوجه قضیه میشید .

console.log($('select').val());
melissa
melissa
@mpoorkamaly

@SobhanDadkhah
به نظرتون توی همین کدهایی که نوشتم چه تغییری باید بدم که اصلا سمت استفاده از آرایه نرم ؟

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام