0

作为编码培训,现在我正在制作一个网页,您可以在其中单击“创建”按钮,该按钮会触发一个弹出窗口,您应该在其中填写 6 个数据输入,其输入样式如文本、选择等。 (见下面的代码和附图)

<template>
      <v-btn class="create-button" color="yellow" @click="alertDisplay">Create</v-btn>

    <br/>

    <p>Test result of createCustomer: {{ createdCustomer }}</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        createdCustomer: null
      }
    },
    methods: {
      alertDisplay() {
        const {value: formValues} = await this.$swal.fire({
            title: 'Create private customer',
            html: '<input id="swal-input1" class="swal2-input" placeholder="Customer Number">' +
                '<select id="swal-input2" class="swal2-input"> <option value="fi_FI">fi_FI</option> <option value="sv_SE">sv_SE</option> </select>'
                 + 
                '<input id="swal-input3" class="swal2-input" placeholder="regNo">' +
                '<input id="swal-input4" class="swal2-input" placeholder="Address">' +
                '<input id="swal-input5" class="swal2-input" placeholder="First Name">' +
                '<input id="swal-input6" class="swal2-input" placeholder="Last Name">'
                ,
            focusConfirm: false,
            preConfirm: () => {
                return [
                    document.getElementById('swal-input1').value,
                    document.getElementById('swal-input2').value,
                    document.getElementById('swal-input3').value,
                    document.getElementById('swal-input4').value,
                    document.getElementById('swal-input5').value,
                    document.getElementById('swal-input6').value
                ]
            }
        })
        if (formValues) {
            this.createdCustomer = this.$swal.fire(JSON.stringify(formValues));
            console.log(this.createdCustomer);
        }   
      }
    }
  }
</script>

多个输入

从技术上讲,它正在工作。单击“创建”按钮时会显示弹出窗口,您可以填写所有 6 个空白并单击“确定”按钮。但我想添加一些功能来检查用户输入是否有效,我的意思是

  • 地址应在 50 个字符以内
  • 名字应在 20 个字符以内
  • customerNumber 应包含字母和数字

等等。

如果是 C 或 Java,我可能会做类似的事情

if(length <= 50){
    // proceed
} else {
    // warn the user that the string is too long
}

,但是当谈到使用 Vue-SweetAlert2 在单个弹出窗口中验证多个输入时,我不知道该怎么做,而且我找不到任何解释得足够详细的页面。

如果它只是一个单一的输入,也许你可以inputValidor像这样使用

const {value: ipAddress} = await Swal.fire({
    title: 'Enter an IP address',
    input: 'text',
    inputValue: inputValue,
    showCancelButton: true,
    inputValidator: (value) => {
        if (!value) {
            return 'You need to write something!'
        }
    }
})

if (ipAddress) {
  Swal.fire(`Your IP address is ${ipAddress}`)
}

,但这个例子只涉及“一个输入”。另外,这个检查的只是“是否给出了IP地址”(,这意味着是否有一个值,它并没有真正检查IP地址的长度是否正确和/或是否输入字符串由数字/字母组成)。

另一方面,我要做的是“在单个弹出窗口中限制多个输入值(例如字符串的长度等)” 。知道我应该怎么做吗?

4

1 回答 1

1

不幸的是,限制输入的 HTML 标签(例如,必需的、模式等)不起作用(请参阅这个问题),所以我找到了两个解决方法。

在链接问题中使用 preConfirm

您可以使用带有Regex的preConfirm 和 if/else 语句来检查您的要求,如果他们不满意,您可以使用Swal.showValidationMessage(error).

 const{value:formValue} = await Swal.fire({
      title: "Some multiple input",
      html: 
        <input id="swal-input1" class="swal-input1" placeholder="name"> +
        <input id="swal-input2" class="swal-input2" placeholder="phone">,
      preConfirm: () => {
        if($("#swal-input1").val() !== "Joe"){
          Swal.showValidationMessage("your name must be Joe");
        } else if (!('[0-9]+'.test($("#swal-input2").val())){
          Swal.showValidationMessage("your phone must contain some numbers");    
        }
      }
});

使用引导

通过这种方式,Bootstrap 在验证时进行检查,您需要class="form-control"在输入类中包含并更改一些 html 代码。

如果某些条件失败,浏览器会按照它们在 html 代码中的顺序显示每个字段的验证消息。

 const {value: formValue} = await Swal.fire({
        title: 'Some multiple inputs',
        html:
            '<form id="multiple-inputs">' +
                '<div class="form-group">' + 
                    '<input type="text" class="form-control swal-input1" id="swal-input1" min=2 max=4 required>' +
                '</div>' +
                '<div class="form-group">' + 
                    '<input type="text" class="form-control swal-input2" id="swal-input2" placeholder="Name" pattern="[A-Za-z]" required>' +
                '</div>' +
            '</form>', 
});

我已经尝试了这两种解决方案,实际上仅适用于 Bootstrap3,但它也应该适用于最新版本。

于 2019-08-10T14:08:25.753 回答