Выбранный переключатель отображает ввод текста с помощью jQuery

#jquery #jquery-mobile

#jquery #jquery-мобильный

Вопрос:

У меня есть группа переключателей, в которых вы можете выбрать свою сумму. Последний вариант — Другой. Я бы хотел, чтобы эта опция отображала поле суммы после его проверки. Это построено с использованием jquery mobile.

Ссылка jsFiddle

 <fieldset data-role="controlgroup">
<legend>Select Amount</legend>
<input type="radio" name="amount" id="50" value="50" checked="checked"/>
<label for="50">$50</label>

<input type="radio" name="amount" id="100" value="100"/>
<label for="100">$100</label>

<input type="radio" name="amount" id="250" value="250"/>
<label for="250">$250</label>

<input type="radio" name="amount" id="500" value="500"/>
<label for="500">$500</label>

<input type="radio" name="amount" id="1000" value="1000"/>
<label for="1000">$1000</label>

<input type="radio" name="amount" id="other" value="other"/>
<label for="other">Other</label>
    <div id="enter_amount">
        <label for="other_amount">Enter Amount:</label>
        <input type="text" name="other_amount" id="other_amount" value="" data-theme="d"  />
    </div>
</fieldset>
  

Что мне нужно написать, чтобы это сработало? В настоящее время я пытаюсь выполнить следующее:

 $(document).ready(function(){
    $("#enter_amount").css("display","none");
        $("#other").click(function(){
        if ($('#other:checked')) {
            $("#enter_amount").slideDown("slow"); //Slide Down Effect
        } else {
            $("#enter_amount").slideUp("slow");  //Slide Up Effect
        }
    });
});
  

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

Ответ №1:

Используйте .change вместо .click . Также я изменил ваш код, чтобы учесть некоторые другие сценарии. Вот скрипка.

 $(document).ready(function(){
    $('#enter_amount').hide(); 
    $('fieldset :radio').change(function(){
       if( this.id === 'other' )
           $('#enter_amount').slideDown('slow'); 
        else if( $('#enter_amount').is(':visible') )
           $('#enter_amount').slideUp('slow');               
    }); 
});
  

Ответ №2:

Это переключатели, поэтому, когда другой переключатель установлен, другой флажок по умолчанию будет снят. Поэтому вы должны привязываться ко всем входам с именем ‘amount’. Также использование jQuery.is () было бы лучшим подходом для проверки того, установлен ли флажок. Также используйте событие jQuery.change()

 $(document).ready(function(){
    $("#enter_amount").css("display","none");
    $('input[name="amount"]').change(function(){
        if ($(this).is('#other')) {
            $("#enter_amount").slideDown("slow"); //Slide Down Effect
        } else {
            $("#enter_amount").slideUp("slow");  //Slide Up Effect
        }
    });
});
  

Вот рабочая скрипка http://jsfiddle.net/jafmC/13 /

Ответ №3:

вы должны изменить его на:

 if ($(this).is(":checked")) {
            $("#enter_amount").slideDown("slow"); //Slide Down Effect
        } else {
            $("#enter_amount").slideUp("slow");  //Slide Up Effect
        }
  

Ответ №4:

Попробуйте это

 $(document).ready(function(){
    $("#enter_amount").css("display","none");
        $("#other").click(function(){
        if ($(this).is(':checked')) {
            $("#enter_amount").slideDown("slow"); //Slide Down Effect
        } else {
            $("#enter_amount").slideUp("slow");  //Slide Up Effect
        }
    });
});
  

Ответ №5:

Поскольку вы на самом деле больше не взаимодействуете с самими переключателями (для просмотра используйте функцию «проверить элемент» в Firebug, Web Inspector или Dragonfly), а вместо этого с элементами, предоставляемыми jQuery Mobile (или jQuery UI), вам необходимо изменить свои селекторы:

 $(document).ready(function() {
    $("#enter_amount").css("display", "none");
    $(".ui-radio").click(function() {
        if ($(this).has('#other') amp;amp; $(this).has('.ui-icon-radio-on')){
            $('#enter_amount').slideDown(500); // works
        }
        else {
            $('#enter_amount').slideUp(500); // doesn't yet work
        }
    });
});
  

Демонстрация JS Fiddle.


Отредактировано (должен признаться, после некоторого раздражения), чтобы добавить улучшенный (т.Е. «функционирующий») if / else проверить:

 $(document).ready(function() {
    $("#enter_amount").css("display", "none");
    $(".ui-radio").click(function() {
        if ($(this).find('#other').length) {
            $('#enter_amount').slideDown(500);
        }
        else {
            $('#enter_amount').slideUp(500);
        }
    });
});
  

Демонстрация JS Fiddle.

Комментарии:

1. В основном это работает, но поле #enter_amount отображается всякий раз, когда установлен флажок на любой из переключателей.

2. Да; Я пытаюсь разобраться с этим сам… Я не понимаю, почему это всегда так. Это один из немногих случаев, когда я когда-либо (буквально) ругался на компьютере, спрашивая: «Как ____ это может быть всегда ______ true ..!?» Тьфу.

3. Я думаю, что @Interstellar_Coder прибил это выше.

4. Попробуйте отредактировать (после hr ). Кажется , теперь он работает надежно … вздох.

5. Я тоже немного задумался, не виню тебя.

Ответ №6:

 $(document).ready(function(){
    $("#enter_amount").hide();

    $("input[name='amount']").change(function(){

        if($(":checked").val() == "other"){
            $("#enter_amount").slideDown("slow"); //Slide Down Effect
        } else {
            $("#enter_amount").slideUp("slow");  //Slide Up Effect
        }
    });
});
  

вы могли бы попробовать это