1

我是 Javascript 新手,我已经获得了一些示例代码,我被要求根据要求进行更改。我有一个检查空字符串的函数和另一个检查是否满足空字符串条件的函数,以进一步检查输入是否为数字(对于电话号码)。

我面临的问题是 isNotEmpty 函数似乎不适用于我的字段,对于 isNumber 函数,即使我将输入更改回数字,我总是会收到警报提示,无论我做什么 isNumber 警报当我点击提交时总是会出现。

我也有一个对象用户,我试图用它来分配我输入给这个用户对象的值,在我的“提交”按钮之后单击表单“用户”的按钮,但我不确定如何去实现它。

请记住,我还是新手,对替代代码和方法不是很熟悉,所以根据我的理解,我想知道为什么这些功能不能按预期工作。

我的 JavaScript:

<script language="javascript">


function User(name,number,pastime){
    this.name=name
    this.number=number
    this.pastime=pastime
}

    var user = new User()

function isNotEmpty(field){
    var inputStr = field.value
    if (inputStr = "" || inputStr == null){

        alert("An entry for this field is required.")
        field.focus()
        field.select()
        return false
    }
    return true
}

function isNumber(field){

    if (isNotEmpty(field)){
        var inputStr = field.value
        for(var i = 0; i<inputStr.length; i++){
            var oneChar=inputStr.substring(i,i+1)
            if (oneChar < "0" || oneChar > "9" || oneChar != "+"){
                alert("Only numbers and area codes are allowed in this field.")
                field.focus()
                field.select()
                return false
            }
        }
        return true
    }return false
}

function isOption(form){

    var type = form.getElementByID("pastimetype")
    var selectedValue = type.options[type.selectedIndex].value;
        if(selectedValue == "selectpastime"){
            alert("Please select a pastime.")
            return false
        }
    return true
}   

function validate(form){
    if(isNotEmpty(form.name) && isNumber(form.number) && isOption(form.pastime)){
        return true
    }
    return false

}

function createUser(form) {
        form.name.value=user.name
        form.name.value=user.number
        form.pastime.value=user.pasttime
}

</script>
</head>

我的 HTML:

<body>

<form method="GET" action="http://www.it.murdoch.edu.au/cgi-bin/reply1.pl"
    onSubmit="return validate(this)">

    <p> Welcome! 
    Please enter the following details:</p>

    <p><label for="name"> Name: </label><br>
    <input name="name" id="name" type="text" size="10" onChange="isNotEmpty(this)"></p>

    <p><label for="number"> Number: </label><br> 
    <input name="number" type="text" id="number" onChange="isNumber(this)"></p>  

    <p><label for ="pastime"> Favourite pastime: </label>
    <select name="pastime" select id="pastimetype">
    <option value="selectpastime">---Please choose an option---</option>
    <option value="surfingtheweb">Surfing the Web</option>
    <option value="playingsport">Playing Sport</option>
    <option value="listeingtomusic">Listening to Music</option>
    <option value="watchingtv">Watching TV</option>
    <option value="playinggames">Playing Games</option>
    <option value="communityservice">Community Service</option>
    <option value="daydreaming">Daydreaming</option>
    <option value="reading">Reading</option>
    <option value="meditation">Meditation</option>
    </select></p>

    <p>
        <input type="submit">
        <input type="button" value="user" onClick="createUser(this.form)">
    </p>

</form>

</body>

</html>
4

2 回答 2

1

在 isNumber 函数中:

for(var i = 0; i<inputStr.length; i++){
    var oneChar=inputStr.substring(i,i+1)
    if (oneChar < "0" || oneChar > "9" || oneChar != "+"){
        alert("Only numbers and area codes are allowed in this field.")
        field.focus()
        field.select()
        return false
    }
}

代替

var oneChar=inputStr.substring(i,i+1)

经过

var oneChar=inputStr.substring(i,1)

因为 substring 的签名函数是:substring(start_index, length_of_substring)。

于 2020-04-20T10:18:17.770 回答
0

尝试这个,

for(var i = 0; i<inputStr.length; i++){
    var oneChar=inputStr.substring(i,1)
    if (isNan(parseInt(oneChar)) && oneChar != "+") {
        alert("Only numbers and area codes are allowed in this field.")
        field.focus()
        field.select()
        return false
    }
}
于 2020-04-20T10:39:18.717 回答