te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Using parsley on a wizard form (3 steps) - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Using parsley on a wizard form (3 steps) - Stack Overflow

programmeradmin4浏览0评论

I'm working on a form based on a Twitter Bootstrap tab.

I use Parsley for validation form.

I would like to validate only the fields on my first tab (step 1) before clicking on the next button that go to step 2.

Is there a way to do that? Cheers.

I'm working on a form based on a Twitter Bootstrap tab.

I use Parsley for validation form.

I would like to validate only the fields on my first tab (step 1) before clicking on the next button that go to step 2.

Is there a way to do that? Cheers.

Share Improve this question edited Sep 12, 2013 at 22:36 Shadow Wizard 66.4k26 gold badges146 silver badges209 bronze badges asked Jun 18, 2013 at 22:37 Romain AchardRomain Achard 832 silver badges8 bronze badges
Add a ment  | 

6 Answers 6

Reset to default 9

You can also add an event listener to parsley that checks if the element is visible or not. If is not visible it will not apply the validation. This way your controls on the invisible tabs are not validated.

$( '#form' ).parsley( 'addListener', {
    onFieldValidate: function ( elem ) {

        // if field is not visible, do not apply Parsley validation!
        if ( !$( elem ).is( ':visible' ) ) {
            return true;
        }

        return false;
    }
} );

Update: Instead of checking for the visibility of the element, you can use whatever condition you may need. For example checking if the element has a specific class.

Example suggested by davidtheclark:

$( elem ).closest('.form-page').hasClass('is-hidden')

If your fields on second tab are hidden, you could just add ':hidden' property to the 'excludedFields' option. That way, each $(yourform).parsley('validate') would only validate visible fields (ie step1 then step2)

If you do so, remember that you will have to manually bind parsley to your form and not with the data-validate="parsley"

If your entire form is loaded in the DOM, and you are able to use the parsely API, you can run multiple validations, one for each step of your wizard. To do that you must use the parsley-bind attribute. Something like:

<form action="#">

    <!-- wizard step 1 --> 
    <div class='step1' parsley-validate parsley-bind>
       <input type="text" ..... />
       <input type="text" ..... />
    </div>

    <!-- wizard step 2 --> 
    <div class='step2' parsley-validate parsley-bind>
       <input type="text" ..... />
       <input type="text" ..... />
    </div>

    <!-- wizard step 3 --> 
    <div class='step1' parsley-validate parsley-bind>
       <input type="text" ..... />
       <input type="text" ..... />
    </div>

</form>
<script>
function onValidate(){

    if(!$('##formID').parsley( 'isValid' )){

        $('.parsley-error').closest('.tab-pane').show();
        return false;

    }

    return true;

 }
</script>    
<form data-validate="parsley" onSubmit="return onValidate()">

Here is the code by @nmoliveira, updated for Parsley 2.1+:


$('form').parsley().on('field:validate', function() {
    var elem = this.$element;

    // If the field is not visible, do not apply Parsley validation!
    if ( !$( elem ).is( ':visible' ) ) {
        this.constraints = [];
    }
});

API has changed a lot in Parsley 2.0.

There's an official example on a good way to achieve this.

发布评论

评论列表(0)

  1. 暂无评论