Плагин jQuery Validation не будет проверяться, когда в обработчике события клика

$("#tournamentDesignTabs").tabs();
$("#tournamentDesign").validate();
$("#createTournament").click(function(){
    if($("#tournamentDesign").validate()){
    $.post(
        "createTournament.php",  
        {tournamentName: $("#tournamentName").val(), district: $("#district").val(), region: $("#region").val(), location: $("#location").val(), date: $("#date").val(), time: $("#time").val(), logo: $("#logo").val()},  
        function(responseText){  
            $("#result").html(responseText);  
        },  
        "html"  )
    } else {
        alert("oh no");
    }
    }
);

Итак, выше приведен сценарий, который я использую для проверки некоторой информации о форме, а затем ввода ее в базу данных. Проблема, с которой я сталкиваюсь, заключается в том, что функция validate, похоже, ничего не делает, когда присоединена к обработчику события click в span. Я также заметил, что onfocusout, похоже, тоже не ведет себя должным образом. Любые предложения или идеи относительно того, что я делаю неправильно. Я знаю, что плагин включен правильно, потому что функция проверки все еще работает, когда я отправляю форму. Я бы предпочел Ajax. Спасибо!

РЕДАКТИРОВАТЬ: как один ответ сказал ниже, они думают, что наличие HTML поможет, так что вот страница. Каждый последний бит кода и контента. Я знаю, что это грязно и грязно, но я учусь и скоро это уберу. В любом случае вот оно:

<!DOCTYPE HTML SYSTEM>
<html>
<head>
<title>Tournament Designer</title>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/themes/smoothness/jquery-ui.css" type="text/css" media="all" />
<link type="text/css" rel="stylesheet" href="stylesheet.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.js"></script>
<script type="text/javascript" src="jquery.ui.touch-punch.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.js"></script>
<script type="text/javascript" src="code.js"></script>
</head>
<body>
<div class="topBanner">Tournament Designer</div>
<br/>
<form id="tournamentDesign" method="post" style="display:inline;">
<span id="tournamentDesignTabs">
    <ul>
        <li><a href="#tabs-1">Details</a></li>
        <li><a href="#tabs-2">Pricing & Promo Codes</a></li>
        <li><a href="#tabs-3">Divisions</a></li>
        <li><a href="#tabs-4">Mats</a></li>
        <span id="createTournament" class="pseudoButton">Create Tournament</span>
        <input type="submit" value="submit"/>
    </ul>
    <div id="tabs-1">
        <p>Enter the details concerning the tournament name, location, date, etc. here.<br/><em>(* denotes a required field)</em></p>
        Tournament Name:<input id="tournamentName" name="tournamentName" value="" class="required"/>*<br/>
        District:<select id="district" name="district" value="" class="required">
                  <option value="0">Provo</option>
                  <option value="1">SLC</option>
                </select>*<br>
        Region:<select id="region" name="region" value="" class="required">
                  <option value="0">West-USA</option>
                </select>*<br/>
        Location:<input id="location" name="location" value="" class="required"/>*<br/>
        Date:<input id="date" name="date" value="" class="required date"/>*<br/>
        Time:<input id="startTime" name="startTime" value="" class="required"/>*<br/>
        Logo:<input id="logo" name="logo" value="" class="url"/>*<span id="addPicture" onclick="displayPicture('tournamentLogo',document.getElementById('logo').value)" class="pseudoButton">Add</span><span id="removePicture" onclick="removePicture('tournamentLogo')" class="pseudoButton">Remove</span><br/>
        <span id="tournamentLogo" class="tournamentLogo"></span>
    </div>
    <div id="tabs-2">
        <p>Set the pricing structure here. You can add as many structures as you like. To remove a structure select it in the textbox below including the comma and delete it.</p>
        # of Divisions:<input id="divisionCount" name="divisionCount" value="" size="3"/> Price:<input id="divisionPrice" name="divisionPrice" value="" size="3"/><span id="addDivisionPricing" onclick="addDivisionPricing()" class="pseudoButton">Add</span><br/>
        Pricing Structures:<br/>
        <span id="divisionPricingInfo" name="divisionPricingInfo" class="divisionPricingInfo"></span><br/>
        <p>Add Promo Codes Here. A valid Promo Code will contain any character between A-Z and 0-9. When creating a Promo Code you can set it to discount by a percentage or fixed dollar amount. Percentage is selected by default. To remove a promo code follow the same steps as above.</p>
        Promo Codes:</br>
        Code:<input id="promoCode" name="promoCode" value="" size="3"/> Discount(Percent<input type="radio" name="percentorDollar" value="0" checked>[%] or Dollars<input type="radio" name="percentorDollar" value="1">[$]): <input id="promoCodeValue" name="promoCodeValue" value="" size="3"/><span id="addPromoCode" onclick="addPromoCode()" class="pseudoButton">Add</span><br/>
        <span id="promoCodeInfo" name="promoCodeInfo" class="divisionPricingInfo"></span><br/>
    </div>
    <div id="tabs-3">
        <p>Skill & Weight Divisions</p>
        Enter Top Level Divisions Here:<input id="tournamentDivisionInput" value="" size=5><span class="addButton" onclick="addDivisions('tournamentDivisionInfo',document.getElementById('tournamentDivisionInput').value,true)">+</span>
        <span id="tournamentDivisionInfo" class="divisionInfo" style="width:800px;"></span>
    </div>
    <div id="tabs-4">
        <p>Mat Design</p>
        Add Mat Area <input id="matAreaInput" size=3/> With 4 mats. <span class="pseudoButton" onclick="addMatArea(document.getElementById('matAreaInput').value)">Add</span><br/>
        <span class="divisionPricingInfo" id="matAreaInfo"></span>
    </div>
</span>
</form>
<span id="result" class="tournamentInfo">I'm here!<span>
<script type="text/javascript">
$("#tournamentDesignTabs").tabs();
//$("#tournamentDesign").validate();
$("#createTournament").click(function(){
    if($("#tournamentDesign").validate()){
    $.post(
        "createTournament.php",  
        {tournamentName: $("#tournamentName").val(), district: $("#district").val(), region: $("#region").val(), location: $("#location").val(), date: $("#date").val(), time: $("#time").val(), logo: $("#logo").val()},  
        function(responseText){  
            $("#result").html(responseText);  
        },  
        "html"  )
    } else {
        alert("oh no");
    }
    }
);
</script>
</body>
</html>
 c2h5oh17 июн. 2012 г., 02:28
Вы, кажется, пропускаете правила проверки
 Frank B17 июн. 2012 г., 02:30
Я полагаюсь на правила по умолчанию, которые поставляются с плагином. Как я уже сказал, при наличии всего этого кода кнопка отправки будет вызывать проверку, но моя псевдо-кнопка, представляющая собой диапазон с именемвестурный дизайн, не будет называть его РЕДАКТИРОВАТЬ: я должен уточнить, что она должна вызывать проверку, поскольку она возвращается как истина и продолжается через код для вызова ajax и вставки данных в базу данных. Однако это на самом деле не подтверждается.

Ответы на вопрос(1)

Решение Вопроса

.validate() это то, что инициализирует плагин валидации на вашемform.

.valid() возвращаетсяtrue или жеfalse в зависимости от того, является ли ваша форма действующей в настоящее время.

Итак, вы используете.valid()не.validate()в пределахif оператор для проверки, если форма действительна ...

$("#tournamentDesign").validate();
$("#createTournament").click(function(){
    if($("#tournamentDesign").valid()){
    ...

Увидетьdocs.jquery.com/Plugins/Validation/valid для получения дополнительной информации.

 17 июн. 2012 г., 17:23
@FrankB, добро пожаловать.
 Frank B17 июн. 2012 г., 03:12
Вы мой человек гений. Спасибо. Я увидел учебник, в котором вместо валидного был валидатор, и подумал, что это сработает. Я не могу вас отблагодарить.

Ваш ответ на вопрос