基于下拉列表的文本框的条件验证

时间:2013-01-12 13:36:39

标签: javascript jquery

我正在使用asp.net mvc网站,我有4 dropdowns和4 textboxes这样:

dialprefix1   callfromnumber1
dialprefix2   callfromnumber2
dialprefix3   callfromnumber3
dialprefix4   callfromnumber4

我想对每一行进行分组,以便dialprefix1中的值为44,则callfromnumber1的长度为10.意味着我想根据{textbox执行验证{1}}并且有多行。

我用它来允许文本框中的数字

dropdown

我正在验证这样的长度:

$(".phone").keydown(function (event) {
    // Allow: backspace, delete, tab, escape, and enter
    if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
            // Allow: Ctrl+A
            (event.keyCode == 65 && event.ctrlKey === true) ||
            // Allow: home, end, left, right
            (event.keyCode >= 35 && event.keyCode <= 39)) {
            // let it happen, don't do anything
        return;
    } else {
        // Ensure that it is a number and stop the keypress
        if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
        event.preventDefault();
        }
    }
});

1)我想基于类将这些组合起来所有textbox都有class = phone,所有下拉列表都有class dialprefix。

2)。如果相关的下拉选择值为44

,我想确保该数字以0,1,2,7,8开头

标记看起来像这样:

$("#DefaultCallFrom1").keypress(function () {
    if ($("#Dialprefix1").val() == "44") {
        if (this.value.substring(0, 1) == "0" && this.value.length == "10") {
            displayAlertMessage("You can not enter more characters");
            this.value.length <= 10
        }
        else {
            displayAlertMessage("You can not enter more characters");
            this.value.length <= 9
        }
    }
})

$("#DefaultCallFrom2").keypress(function () {
    if ($("#Dialprefix2").val() == "44") {
        if (this.value.substring(0, 1) == "0")
            return this.value.length <= 10
        else
            return this.value.length <= 9
    }
})

2 个答案:

答案 0 :(得分:0)

为每个输入提供一个公共类(它们不会显示在标记中)。有几种方法可以将input与其对应的select进行匹配,例如使用prev()next(),如果它们在html树中并排,而没有其他元素如{ {1}}将它们分开。

学习遍历html树的各种方法将有助于简化jQuery代码和创建标记,从而简化traveral。请注意,以下任何内容都不需要ID。

我将使用<br>来匹配它们,因为标记未知。我使用index()作为DefaultCallFrom的className。

input

API参考

http://api.jquery.com/index/

http://api.jquery.com/prev/

http://api.jquery.com/next/

答案 1 :(得分:0)

这是您的代码的工作版本。试试这个而不是$("#DefaultCallFrom1").keypress(function ()

$(".phone").keypress(function(evt) {
    // Find the index
    index = ($(this).attr('id')).split("DefaultCallFrom")[1];

    // Check Dialprefix
    if ($("#Dialprefix" + index).val() == "44") {
        // 0 prefix
        if (this.value[0] == 0) {
            if(this.value.length == 10) {
                alert("You can not enter more characters...");
                evt.preventDefault();
            } 
        } else {
            if(this.value.length == 9) {
                alert("You can not enter more characters...");
                evt.preventDefault();
            }
        }
    }
});