2013-08-07 3 views
6

Я сделал форму, вложенную внутри мастера Fuelux. Поле требуемой книги не будет отображаться, если пользователь нажимает следующую кнопку. Существуют ли какие-либо методы, которые могут потребовать, чтобы пользователь не мог проработать, нажав кнопку «Далее» до тех пор, пока не будут введены необходимые поля?Ввод подтверждения мастера Fuelux

Вот пример ввода

<tr> 
    <td>3</td> 
    <td><label class="control-label" for="inputCompanyCountry">Country <span style="color:red">*</span></label></td> 
    <td><div class="controls controls-extra"><input type="text" id="inputCompanyCountry" name="inputCompanyCountry" value=""required></div></td> 
    <td><div class="help-inline">Country of residence</div></td> 
    </tr> 

Сценарии, используемые для следующей и предыдущей кнопки

$(function() { 
$('#MyWizard').on('change', function(e, data) { 
    console.log('change'); 
    if(data.step===3 && data.direction==='next') { 
     // return e.preventDefault(); 
    } 
}); 

$('#MyWizard').on('changed', function(e, data) { 
    console.log('changed'); 
}); 
/*$('#MyWizard').on('finished', function(e, data) { 
    console.log('finished'); 
});*/ 
$('#btnWizardPrev').on('click', function() { 
    $('#MyWizard').wizard('previous'); 
}); 
$('#btnWizardNext').on('click', function() { 
    $('#MyWizard').wizard('next','foo'); 
}); 


$('#btnWizardStep').on('click', function() { 
    var item = $('#MyWizard').wizard('selectedItem'); 
    console.log(item.step); 
}); 
}); 

ответ

7

Если вы хотите проверить без отправки формы, вы можете использовать jquery.validate , Используйте метод $("#form_id").valid();, он возвращает true или false в зависимости от статуса формы, добавляя класс «требуется» к соответствующим входам.

$('#MyWizard').on('change', function(e, data) { 
    console.log('change'); 
    if(data.step===3 && data.direction==='next') { 
     if($("#form_id").valid()){ 
      // allow change 
     }else{ 
      // cancel change 
     } 
    } 
}); 
+0

http://bootply.com/72771 Это пример моей проблемы. Пользователь не должен передавать следующую кнопку до тех пор, пока в поле ввода не будет введено значение. –

0

Другой вариант заключается в упаковке каждого шага в форме, а затем при отправке браузер не будет действовать до тех пор, пока не будут заполнены необходимые поля. Это зависит от браузера, который поддерживает атрибут «required» в форме как часть спецификации HTML5, но вы можете использовать это. Есть некоторые ссылки, которые появляются сломанные в этом ответе, но есть некоторые начиная информация, а также: How to bind to the submit event when HTML5 validation is used?

+0

Проблема состоит в том, что форма разделена на несколько разделов, поэтому, если пользователь находится на шеврон №3, они не могут видеть требуемое поле на шеврон # 1. Что было бы лучше, если бы они не могли нажимать кнопку «Далее» до тех пор, пока не будут заполнены необходимые поля. –

+0

Как в этом случае, так и в ответе выше, вам нужно будет применить атрибут «disabled» к кнопкам. Затем вы будете запускать какое-то событие, когда вы проходите проверку, и вам также понадобится обработчик событий, который прослушивает это событие и удаляет отключенный атрибут. Таким образом, нет ни одного метода, который будет делать это, но для этого не так много кода для записи. Используя приведенный выше пример Birkto, вы должны поместить код для удаления отключенного атрибута, где у него есть '' '' // allow change'''' – scottplumlee

2

, что я сделал:

$('#MyWizard').on('change', function(e, data) { 
    var isValid = $('#stepId [required]').valid(); 
    if (data.direction === 'next' && !isValid) { 
     e.preventDefault(); 
    } 
}); 

Если вы хотите отключить перемещение в обоих направлениях, а затем просто удалить data.direction ==='next' часть ,

+0

Как вы получили #stepId? борется с этим –

+0

'#stepId' - это 'id' шага, который вы хотите пропустить. – Dementic