javascript - 怎么样阻止默认事件的出发(即验证不通过无法滑动?) 求大神!
黄舟
黄舟 2017-04-11 10:04:27
[JavaScript讨论组]

默认的效果是滑动滑块按钮时进行表单验证 我默认是这样写的:

 $(document).ready(function() { 
    $('#slider').on('touchstart', function (event) {
            checkslide();
        });
});
    function checkslide(){
        $user_mobile=document.getElementById("user_mobile").value;
        $user_pwd1=document.getElementById("user_pwd1").value;
        $user_pwd2=document.getElementById("user_pwd2").value;
        if($user_mobile==''){
            alert("手机号不能为空")
            return false;
        }
        if(!(/^1[34578]\d{9}$/.test($user_mobile))){
            alert("手机号格式错误")
            return false;
        }
        if($user_pwd1==''){
            alert("密码不能为空");
            return false;
        }
        if(!(/^.{6,16}$/.test($user_pwd1))){
            alert("密码格式不正确")
            return false;
        }
        if($user_pwd2==''||$user_pwd1!=$user_pwd2){
            alert("两次密码不一致");
            return false;
        }
        return true;
    }

现在要实现不用alert的提示 表单验证不成功则滑块不能滑动 成功则可以滑动
滑块引用的是插件:
/**

  • jquery plugin -- jquery.slideunlock.js

  • www.sucaijiayuan.com

  • created: March 27, 2016
    */

;(function ($,window,document,undefined) {

function SliderUnlock(elm, options, success){
    var me = this;
    var $elm = me.checkElm(elm) ? $(elm) : $;
    success = me.checkFn(success) ? success : function(){};

    var opts = {
        successLabelTip:  "Successfully Verified",
        duration:  200,
        swipestart:  false,
        min:  0,
        max:  $elm.width(),
        index:  0,
        IsOk:  false,
        lableIndex:  0
    };

    opts = $.extend(opts, options||{});

    //$elm
    me.elm = $elm;
    //opts
    me.opts = opts;
    //是否开始滑动
    me.swipestart = opts.swipestart;
    //最小值
    me.min = opts.min;
    //最大值
    me.max = opts.max;
    //当前滑动条所处的位置
    me.index = opts.index;
    //是否滑动成功
    me.isOk = opts.isOk;
    //滑块宽度
    me.labelWidth = me.elm.find('#label').width();
    //滑块背景
    me.sliderBg = me.elm.find('#slider_bg');
    //鼠标在滑动按钮的位置
    me.lableIndex = opts.lableIndex;
    //success
    me.success = success;
}

SliderUnlock.prototype.init = function () {
    var me = this;

    me.updateView();
    me.elm.find("#label").on("mousedown", function (event) {
        var e = event || window.event;
        me.lableIndex = e.clientX - this.offsetLeft;
        me.handerIn();
    }).on("mousemove", function (event) {
        me.handerMove(event);
    }).on("mouseup", function (event) {
        me.handerOut();
    }).on("mouseout", function (event) {
        me.handerOut();
    }).on("touchstart", function (event) {
        var e = event || window.event;
        me.lableIndex = e.originalEvent.touches[0].pageX - this.offsetLeft;
        me.handerIn();
    }).on("touchmove", function (event) {
        me.handerMove(event, "mobile");
    }).on("touchend", function (event) {
        me.handerOut();
    });
};

/**
 * 鼠标/手指接触滑动按钮
 */
SliderUnlock.prototype.handerIn = function () {
    var me = this;
    me.swipestart = true;

    //var myDate = new Date();
    //var H = myDate.getHours();//获取小时
    //var M = myDate.getMinutes(); //获取分钟
    //var S = myDate.getSeconds();//获取秒
    //var MS = myDate.getMilliseconds();//获取毫秒
    //var milliSeconds = H * 3600 * 1000 + M * 60 * 1000 + S * 1000 + MS;
    //
    //startTime = milliSeconds;
    me.min = 0;
    me.max = me.elm.width();
};

/**
 * 鼠标/手指移出
 */
SliderUnlock.prototype.handerOut = function () {
    var me = this;
    //停止
    me.swipestart = false;

    weizhi = me.labelWidth;

    //me.move();
    if (me.index < me.max) {
        me.reset();
    }
};

/**
 * 鼠标/手指移动
 * @param event
 * @param type
 */
SliderUnlock.prototype.handerMove = function (event, type) {
    var me = this;
    if (me.swipestart) {
        event.preventDefault();
        event = event || window.event;
        if (type == "mobile") {
            me.index = event.originalEvent.touches[0].pageX - me.lableIndex;
        } else {
            me.index = event.clientX - me.lableIndex;
        }
        me.move();
    }
};

/**
 * 鼠标/手指移动过程
 */
SliderUnlock.prototype.move = function () {
    var me = this;
    if ((me.index + me.labelWidth) >= me.max) {
        me.index = me.max - me.labelWidth -2;
        //停止
        me.swipestart = false;
        //解锁
        me.isOk = true;
    }
    if (me.index < 0) {
        me.index = me.min;
        //未解锁
        me.isOk = false;
    }
    if (me.index+me.labelWidth+2 == me.max && me.max > 0 && me.isOk) {
        //解锁默认操作
        /*之前默认的解锁后显示文字的效果*/
        //$('#label').unbind().next('#labelTip').
        //text(me.opts.successLabelTip).css({'color': '#fff'});
        $('#label').unbind().parent().parent('#intem-inner1').css({'display':'none'})
        $('#label').unbind().parent().parent('#intem-inner1').siblings('#intem-inner2').css({'display':'block'})
        me.success();
    }
    me.updateView();
};
/**
 * 更新视图
 */
SliderUnlock.prototype.updateView = function () {
    var me = this;

    me.sliderBg.css('width', me.index);
    me.elm.find("#label").css("left", me.index + "px")
};

/**
 * 重置slide的起点
 */
SliderUnlock.prototype.reset = function () {
    var me = this;

    startTime = 0;

    me.index = 0;
    me.sliderBg .animate({'width':0},me.opts.duration);
    me.elm.find("#label").animate({left: me.index}, me.opts.duration)
        .next("#lableTip").animate({opacity: 1}, me.opts.duration);
    me.updateView();
};

/**
 * 检测元素是否存在
 * @param elm
 * @returns {boolean}
 */
SliderUnlock.prototype.checkElm = function (elm) {
    if($(elm).length > 0){
        return true;
    }else{
        throw "this element does not exist.";
    }
};

/**
 * 检测传入参数是否是function
 * @param fn
 * @returns {boolean}
 */
SliderUnlock.prototype.checkFn = function (fn) {
    if(typeof fn === "function"){
        return true;
    }else{
        throw "the param is not a function.";
    }
};
window['SliderUnlock'] = SliderUnlock;

})(jQuery, window, document);

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
高洛峰

看了下插件,插件原生没有disable.
你可以选择:
1,到github上面请求作者增加disable
2,自己给他加disable,顺便提个PR做福人群
3,在现有的基础上,在原滑块p上面默认覆盖一个p拦截掉用户交互事件,验证之后去掉该p.
4,验证之前不做slideUnlock的初始化,验证通过之后才做初始化
5,换插件

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号