Як скинути форму за допомогою jQuery методом .reset ()


270

У мене був робочий код, який міг би скинути форму при натисканні на кнопку скидання. Однак після того, як мій код стає довше, я розумію, що він більше не працює.

 <div id="labels">
        <table class="config">
            <thead>
                <tr>
                    <th colspan="4"; style= "padding-bottom: 20px; color:#6666FF; text-align:left; font-size: 1.5em">Control Buttons Configuration</th>
                </tr>
                <tr>
                    <th>Index</th>
                    <th>Switch</th>
                    <th>Response Number</th>
                    <th>Description</th>
                </tr>
            </thead>
            <tbody>

                <form id="configform" name= "input" action="#" method="get">
                <tr><td style="text-align: center">1</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" value="" id="number_one"></td>
                    <td><input style="background: white; color: black;" type="text"  id="label_one"></td>
                </tr>
                <tr>
                    <td style="text-align: center">2</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id = "number_two" value=""></td>
                    <td><input style="background: white; color: black;" type="text"  id = "label_two"></td>
                </tr>
                <tr>
                    <td style="text-align: center">3</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id="number_three" value=""></td>
                    <td><input style="background: white; color: black;" type="text" id="label_three"></td>
                </tr>
                <tr>
                    <td style="text-align: center">4</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id="number_four" value=""></td>
                    <td><input style="background: white; color: black;" type="text" id="label_three"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" id="configsubmit" value="Submit"></td>
                </tr>
                <tr>
                    <td><input type="reset" id="configreset" value="Reset"></td>
                </tr>

                </form>
            </tbody>
        </table>

    </div>

І мій jQuery:

 $('#configreset').click(function(){
            $('#configform')[0].reset();
 });

Чи є якесь джерело, яке я повинен включати в свої коди, щоб .reset()метод працював? Раніше я використовував:

<script src="static/jquery.min.js">
</script>
<script src="static/jquery.mobile-1.2.0.min.js">
</script>

і .reset()метод працював.

В даний час я використовую

<script src="static/jquery-1.9.1.min.js"></script>      
<script src="static/jquery-migrate-1.1.1.min.js"></script>
<script src="static/jquery.mobile-1.3.1.min.js"></script>

Чи може це бути однією з причин?


ви можете навести приклад того, що не працює? чи будь-яке з полів переробляється?
Арун П Джонні

це щось подібне, але тут добре працює jsfiddle.net/chJ8B :( ймовірно, через інші частини сценарію? але у мене є лише 1 форма
yvonnezoe

моє запитання - чи не скидається жодне поле / деякі працюють
Arun P Johny

13
Ваш HTML-код недійсний . Форма не може бути дочірнім елементом TBODY, а TR не може бути дочірнім елементом FORM. Помістіть теги форми поза таблицею (тобто поставте таблицю у форму). Цілком можливо, що форма переміщується за столом, але елементи форми залишаються в клітинках, тому вони більше не перебувають у формі.
RobG

@RobG: О хороший момент! я спробую це. спасибі! я міг би пропустити цей корисний коментар, якщо я не повернусь сюди, щоб отримати своє скрипкове посилання: s
yvonnezoe

Відповіді:


463

Ви можете спробувати використовувати тригер () Посилання Посилання

$('#form_id').trigger("reset");

2
Просто магічно і прямо вперед! Дуже вдячний за спільний доступ.
Аджай Кумар

шановні виборці, чи не могли б ви сказати мені причину вашого голосування, щоб я міг покращити свою відповідь.
SagarPPanchal

Я використовую $ ('. Profile_img_form'). Тригер ('скидання'); я додав профіль_img_form названий клас у мою форму, а потім назвав його. воно не скидає мою форму та повертає повідомлення про помилку, як Uncaught SyntaxError: Неправильний регулярний вираз: /(^|\.)bs\.(?:.*\.|)fileinput(\.|$)/: Просимо запропонувати, що таке проблема. Дякую.
Kamlesh

@Kamlesh це повинно працювати, я створив для вас демонстрацію, натисніть на jsfiddle.net/Lkt4eq9y/2
SagarPPanchal

1
Дякую за відповідь. Збережені години Googling / SO'ing :)
Сільва

276

http://jsfiddle.net/8zLLn/

  $('#configreset').click(function(){
        $('#configform')[0].reset();
  });

Помістіть це у JS-скрипці. Працювали за призначенням.

Отже, жодне з вищезгаданих питань тут не винне. Можливо, у вас виникає конфліктна проблема з ідентифікатором? Чи справді виконується клацання?

Редагувати: (тому що я сумний мішок без належної можливості коментування) Це не проблема безпосередньо з вашим кодом. Це добре працює, коли ви виймаєте його з контексту сторінки, яку ви зараз використовуєте, тому замість того, щоб бути чимось із конкретними даними форми jQuery / javascript & атрибути, це має бути щось інше. Я б почав розбивати код навколо цього і намагаюся знайти, де це відбувається. Я маю на увазі, просто щоб «переконатися», я гадаю, ти міг би ...

console.log($('#configform')[0]);

у функції кліку та переконайтесь, що він орієнтований на потрібну форму ...

і якщо він є, він повинен бути чимось, що тут не вказано.

редагувати частину 2: Одне, що ви можете спробувати (якщо це не націлено на нього правильно), це використовувати "input: reset" замість того, що ви використовуєте ... також, я б запропонував, тому що це не ціль, яка неправильно працює, щоб дізнатися на що спрямований фактичний клік. Просто відкрийте інструменти firebug / developer, що вам робити, кинути

console.log($('#configreset'))

і подивіться, що спливе. і тоді ми можемо піти звідти.


немає суперечливого ідентифікатора :( я намагаюся вибрати шар за шаром і перевірити, чи працює клік
yvonnezoe

1
Хм здається, що клацання не працює! я доданий $('#ptest').html("clicked reset")у click (function () {}); де він повинен відображати "натиснув скинути", але він не з'явився
yvonnezoe

У мене тут питання. кожного разу, коли я використовую console.log, я не маю уявлення, куди слідкувати за цим. Я використовую Python IDLE і термінал для запуску сценарію python. javascript у ньому. у будь-якому випадку, коли я використовую `alert ($ ('# configform') [0]), це дає мені [об’єкт HTMLFormElement]
yvonnezoe

1
Спробуйте скористатись сповіщенням (JSON.stringify ($ '# configform') [0])). Сповіщення не надто піклується про симпатичні предмети друку (або розповісти, що в ньому є). Це просто дає вам знати, що це об’єкт.
FullOnFlatWhite

1
@DylanChensky магія jQuery полягає в тому, що все - це набір (масив). Так само, як якщо б ви використовували звичайний масив у jQuery, [0]вибираєте перший елемент. Але в jQuery він вибирає фактичний html елемента. Отже, [0]надає вам html, який дозволяє викликати метод html, а не jQuery reset. Дивіться відповідь @kevin нижче для отримання додаткової інформації.
FullOnFlatWhite

110

Відповідно до цієї публікації тут , jQuery не має reset()методу; але рідний JavaScript робить. Отже, перетворіть елемент jQuery в об’єкт JavaScript, використовуючи:

$("#formId")[0].reset()
// or
$("#formId").get(0).reset()

1
Це працює, і я згоден, jQuery не має методу reset (). Ви можете побачити, як це зробити за допомогою власного JavaScript на веб-сайті w3school doc: w3schools.com/jsref/met_form_reset.asp
serfer2

2
Я хотів би зазначити, що це лише скине форму, не зрозуміє її. Тобто, якщо у формі були значення, надіслані із запитом, вони будуть відновлені.
Протектор один

Я хотів би додати коментар щодо заповнювача, початкового візуалізації форми, елементів форми мають значення заповнювача, після цього скидання, незалежно від того, як заповнювач заповнюється знову, але значення стає порожнім, тому будьте уважні до повного підтвердження форми. Я додавав загальну перевірку форми, щоб перевірити значення заповнення за замовчуванням.
Рамратан Гупта

48

Це одна з тих речей, що насправді простіше зробити у ванільному Javascript, ніж jQuery. jQuery не має resetметоду, але Елемент форми HTML робить, так що ви можете скинути всі поля у такій формі:

document.getElementById('configform').reset();

Якщо ви зробите це з допомогою JQuery (як показано в інших відповідях тут: $('#configform')[0].reset()), то [0]це витяг ту ж форму DOM елемент , який ви отримаєте безпосередньо через document.getElementById. Останній підхід є і більш ефективним, і простішим (оскільки при підході jQuery ви спочатку отримуєте колекцію, а потім добираєте елемент з неї, тоді як з ванільним Javascript ви просто отримуєте елемент безпосередньо).


23

Кнопка скидання взагалі не потребує сценарію (або імені або ідентифікатора):

<input type="reset">

і ви закінчили. Але якщо ви справді повинні використовувати скрипт, зауважте, що кожен елемент контролю має властивість форми, що посилається на форму, в якій він знаходиться, так що ви можете зробити:

<input type="button" onclick="this.form.reset();">

Але кнопка скидання - це набагато кращий вибір.


Ви маєте на увазі просто просто цей рядок буде робити? oO так, моя HTML вище правильна?
yvonnezoe

Визначте "не працює". Яку помилку ви отримуєте? Що не працює? Кнопки скидання були частиною форм HTML назавжди, вони працюють.
RobG

1
"не працює" - це нічого не скидає, жодної зміни у формі не було помічено.
yvonnezoe

1
Щось слід зазначити, що "скидання" не означає "моя форма очищена". Насправді семантика "скидання" - це повернення всіх елементів "форми" до їх первісних атрибутів "значення". Це мене бентежило хоча б на кілька хвилин!
jocull

@ jocull - коли все інше виходить з ладу, завжди є або W3C, або WHATWG версія стандарту HTML. ;-)
RobG

21

Я нарешті вирішив проблему !! @RobG мав рацію щодо formтегу та tableтегу. тег повинен бути розміщений за межами столу. З цим,form

<td><input type="reset" id="configreset" value="Reset"></td>

працює без потреби jquery чи чогось іншого. просто натиснути на кнопку і тадаа ~ вся форма скидається;) блискуча!


3
зазвичай ви можете підтвердити, що це відбувається, ознайомившись із вихідним кодом (не переглядаючи джерело сторінки, оскільки це покаже, що було створено, а скоріше, використовуючи щось на зразок Інструментів для розробників <kbd> F12 </kbd>), що показує, що " браузер бачить "- у такому випадку він би показав вам (принаймні в Chrome), що formтег був автоматично закритий на початку tbody, виключаючи вхідні елементи.
drzaus



13

За допомогою функції jquery .closest (елемент) та .find (...) .

Отримання батьківського елемента та пошук дитини .

Нарешті, виконайте потрібну функцію.

$("#form").closest('form').find("input[type=text], textarea").val("");

4
Хоча цей блок коду може відповісти на запитання, ви завжди повинні дати пояснення, чому це робиться.
Саша Вовк

1
$("#form").find("input[type=text], textarea").val("");Я зробив це так
Біра

11

Перший рядок скидає введення форм

$('form#myform').trigger("reset"); //Line1
$('form#myform select').trigger("change"); //Line2

Другий буде скинутий select2

Необов’язково: Ви можете користуватися цим, якщо у вас різні типи зареєстрованих на різних подіях

$('form#myform select, form input[type=checkbox]').trigger("change"); //Line2

5

За допомогою цієї функції скидання jQuery можливо швидке скидання полів форми.

коли ви отримали відповідь про успіх, тоді стріляйте нижче коду.

$(selector)[0].reset();


4

Ви можете просто додати тип введення = скинути таким чином id = resetform

<html>
<form>
<input type = 'reset' id = 'resetform' value = 'reset'/>
<!--Other items in the form can be placed here-->
</form>
</html>

тоді з jquery ви просто використовуєте функцію .click () на елементі з id = resetform наступним чином

<script> 
$('#resetform').click();
</script>

і форма скидає Примітка. Ви також можете приховати кнопку скидання за допомогою id = resetform, використовуючи css

<style>
#resetform
{
display:none;
}
</style>

Не забудьте приховати це… зробити його більш сучасним виглядом. <type type = 'reset' id = 'resetform' value = 'reset' / style = 'display: none;'>
mangas

3

Ось просте рішення з Jquery. Це працює в усьому світі. Погляньте на код.

$('document').on("click", ".clear", function(){
   $(this).closest('form').trigger("reset");
})

Додайте чіткий клас до кнопки в будь-якій формі, необхідній для її скидання. Наприклад:

<button class="button clear" type="reset">Clear</button>

3

jQuery не має reset()методу; але рідний JavaScript робить. Отже, перетворіть елемент jQuery в об’єкт JavaScript, використовуючи:

$("#formId")[0].reset();

$("#formId").get(0).reset();

Ми можемо просто використовувати код Javascript

document.getElementById("formid").reset();

2
<button type="reset">Reset</reset>

Найпростіший спосіб я придумати, який є надійним. Розмістити в тезі форми.


1

Можна скористатися наступним.

@using (Html.BeginForm("MyAction", "MyController", new { area = "MyArea" }, FormMethod.Post, new { @class = "" }))
{
<div class="col-md-6">
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">
        @Html.LabelFor(m => m.MyData, new { @class = "col-form-label" })
    </div>
    <div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">
        @Html.TextBoxFor(m => m.MyData, new { @class = "form-control" })
    </div>
</div>
<div class="col-md-6">
    <div class="">
        <button class="btn btn-primary" type="submit">Send</button>
        <button class="btn btn-danger" type="reset"> Clear</button>
    </div>
</div>
}

Потім очистіть форму:

    $('.btn:reset').click(function (ev) {
        ev.preventDefault();
        $(this).closest('form').find("input").each(function(i, v) {
            $(this).val("");
        });
    });

Здається, тут багато коду, що стосується рамки. Я рекомендую уникати подібних речей, відповідаючи на запитання щодо SO, оскільки в цьому питанні не вказано, що вони використовують будь-яку рамку, окрім jQuery
Lazerbeak12345

0

Ваш код повинен працювати. Переконайтесь, що static/jquery-1.9.1.min.jsіснує. Також ви можете спробувати повернутися до static/jquery.min.js. Якщо це вирішує проблему, то ви визначили проблему.


Єдиною іншою проблемою, яку я можу придумати, є те, що у вас є інша форма з тим же id ( configform). Вам слід провести певне розслідування за допомогою консолі. Спочатку спробуйте $. Якщо ви користуєтеся Chrome, введення $консолі активує список, залежний від контексту, якщо завантажується jQuery. Якщо ви введете $і натисніть return, він оцінить функцію, якщо завантажується jQuery. Наступна спроба $("#configform"). Клацніть правою кнопкою миші результат і виберіть Reveal in Elements panel.
ic3b3rg

дякую :), але у мене немає хрому. це так само, як це зробити за допомогою firebug? (у мене він встановлений, але ніколи не використовуйте його раніше)
yvonnezoe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.