Rumah > hujung hadapan web > tutorial js > Perkara yang perlu diambil perhatian semasa menulis petua skrip skrip_javascript kotak teks JavaScript

Perkara yang perlu diambil perhatian semasa menulis petua skrip skrip_javascript kotak teks JavaScript

WBOY
Lepaskan: 2016-05-16 15:18:32
asal
1391 orang telah melayarinya

Dalam HTML, terdapat dua cara untuk mewakili kotak teks:

Satu ialah satu baris teks menggunakan elemen input, dan satu lagi ialah kotak teks berbilang baris menggunakan textarea.

Untuk menggunakan kaedah input, jenis mesti ditambah dan ditetapkan kepada "teks".

    Sifat
  • saiz membolehkan anda menentukan bilangan aksara yang boleh dipaparkan dalam kotak teks.
  • Atribut
  • nilai boleh menetapkan nilai awal kotak teks.
  • Atribut
  • maxlength digunakan untuk menentukan bilangan maksimum aksara yang boleh diterima dalam kotak teks.

Nilai awal textarea mesti diletakkan dalam teg permulaan dan akhir.

  • cols ialah bilangan baris aksara kotak teks;
  • baris ialah bilangan lajur aksara kotak teks
Selain itu, anda tidak boleh menentukan bilangan maksimum aksara untuk kawasan teks dalam HTML

1 Pilih teks

Kedua-dua kotak teks di atas disokong

  • kaedah pilih(), kaedah ini digunakan terutamanya untuk memilih semua teks dalam kotak teks. Tidak menerima sebarang parameter.
  • Acara pilih yang sepadan dengan kaedah ini dicetuskan apabila teks dalam kotak teks dipilih.

1 pilih() kaedah

Kod berikut akan memilih semua teks selagi kotak teks mendapat fokus:

var textBox = document.getElementById("myForm").elements["firstName"];
//设置默认值
textBox.value = "input your firstName";
//设置事件
textBox.addEventListener("focus", function () {
  event.target.select();
});
Salin selepas log masuk

2 pilih acara

Apabila acara ini dicetuskan:

  • Secara amnya, acara pilihan akan dicetuskan hanya apabila pengguna memilih teks (dan melepaskan tetikus ).
  • Dalam IE8 dan versi terdahulu, selagi pengguna memilih huruf (tanpa melepaskan tetikus), acara pilihan akan dicetuskan; juga akan dicetuskan apabila kaedah pilih() dipanggil;
  • Contohnya:

3 Dapatkan teks yang dipilih

var textBox = document.getElementById("myForm").elements["firstName"];
//设置默认值
textBox.value = "input your firstName";
//设置事件
textBox.addEventListener("select", function () {
  console.log("selected");
});
Salin selepas log masuk
Penggunaan dua atribut:

selectionStart

  • pilihanTamat
  • Dua atribut ini menyimpan nilai berasaskan 0, menunjukkan julat (offset) teks yang dipilih. Oleh itu, untuk mendapatkan teks dalam kotak teks yang dipilih oleh pengguna, anda boleh menggunakan kod berikut:
  • Selain itu, anda juga boleh menggunakan atribut ini untuk menetapkan keadaan lalai semua yang dipilih apabila fokus diperoleh:

var textBox = document.getElementById("myForm").elements["firstName"];
//设置默认值
textBox.value = "input your firstName";
//设置事件
textBox.addEventListener("select", function () {
  var selected = textBox.value.substring(textBox.selectionStart,textBox.selectionEnd);
  console.log(selected); 
});
Salin selepas log masuk
atau:

textBox.addEventListener("focus", function () {
  textBox.selectionStart = "0";
  textBox.selectionEnd = textBox.value.length;
});
Salin selepas log masuk
Walau bagaimanapun, apabila menggunakan atribut selectionStart/End, IE8 tidak menyokongnya, tetapi menyokong satu lagi yang bernama

textBox.addEventListener("focus", function () {
  textBox.blur();
});
Salin selepas log masuk
document.selection object, yang menyimpan maklumat teks yang dipilih oleh pengguna dalam keseluruhan dokumen

  • Dapatkan versi yang serasi bagi teks yang dipilih:
2. Pilih sebahagian daripada teks

Kaedah untuk memilih sebahagian daripada teks ialah:
function getSelectedText (textbox) {
  if (typeof textbox.selectionStart == "number") {
    return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);
  }else if (document.selection) {
    return document.selection.createRange().text;
  }
}
Salin selepas log masuk

kaedah setSelectionRange()

. Menerima dua parameter: indeks aksara pertama yang akan dipilih dan indeks aksara terakhir.

Untuk menyekat pemilihan pengguna:

Untuk menetapkan fokus pada kotak teks sejurus sebelum atau selepas memanggil setSelectionRange(). Kaedah yang digunakan dalam IE ialah skop aplikasi untuk menyelesaikan masalah teks:

textBox.addEventListener("focus", function () {
  textBox.setSelectionRange(0,0);
});
textBox.addEventListener("select", function () {
  textBox.setSelectionRange(0,0);
});
Salin selepas log masuk
Versi yang serasi: lebih biasa digunakan

var range = textBox.createTextRange();
range.collapse(true); //范围折叠到开头
range.moveStart("Character",0);
range.moveEnd("Character",textBox.value.length);
range.select();
Salin selepas log masuk
3. Input penapis

function selectText(textbox, startIndex, stopIndex) {
  if (textbox.setSelectionRange) {
    textbox.setSelectionRange(startIndex, stopIndex);
  } else if (textbox.createTextRange()) {
    var range = textbox.createTextRange();
    range.collapse(true); //范围折叠到开头
    range.moveStart("Character", startIndex);
    range.moveEnd("Character", stopIndex);
    range.select();
  };
}
Salin selepas log masuk
1. Sekat aksara

Kod berikut hanya membenarkan memasukkan nombor:

Walau bagaimanapun, sesetengah penyemak imbas akan mencetuskan peristiwa penekanan kekunci untuk kekunci atas, bawah dan ruang belakang, jadi anda perlu menyahlarang kekunci operasi yang biasa digunakan ini, selagi anda tidak menyekat kekunci tersebut yang pengekodan aksaranya kurang daripada 10:

四、操作剪贴板

以下是6个剪贴板事件

  • beforecopy:在发生复制操作前触发
  • copy:在发生复制时触发
  • beforecut:在发生剪贴前操作
  • cut:在发生加贴时操作
  • beforepaste:在发生黏贴操作前触发
  • paste:在发生黏贴操作时触发

如设置禁止拷贝:

//拷贝之前提示禁止拷贝
textBox.addEventListener("beforecopy", function() {
  textBox.value = "do not copy";
});
//拷贝时禁止拷贝
textBox.addEventListener("copy", function() {
  event.preventDefault();
});
Salin selepas log masuk

要访问剪贴板中的数据,可以使用clipboardData对象,在IE中,这个对象是window对象的属性,在friefox,safari和chrome,这个对象是相应event对象的属性;在IE中可以随时访问该对象;但在其他浏览器中只有在处理剪贴板事件期间才有效。

这个clipboardData对象有三个方法:

  • getData()
  • setData()
  • clearData()

getData()接收一个参数,即要取得数据的格式(IE中有两种数据格式:text和URL;在其他浏览器中这个参数是一种MIME类型;不过可以用text代替text/plain)。

setData()接收两个参数,即数据类型和要放在剪贴板中的文本。(第一个参数中,IE支持text和URL;第二个参数中chrome和safari不支持text类型);这两个浏览器在成功将文本放到剪贴板中后,都会返回true;否则,返回false:

function getClipboardText(event) {
  var clipboardData = (event.clipboardData || window.clipboardData);
  return clipboardData.getData("text");
}

function setClipboardText(event, value) {
  if (event.clipboardData) {
    return event.clipboardData.setData("text/plain", value);
  } else if (window.clipboardData) {
    return window.clipboardData.setData("text", value);
  }
}

Salin selepas log masuk

目前浏览器逐渐收紧对访问剪贴板的操作。

五、自动切换焦点

理论上就是在前一个文本框中的字符打到最大数量后,自动将焦点切换到下一个文本框:

DOM:

<form action="">
  <input type="text" name="tel11" id="txtTel1" maxLength="3">
  <input type="text" name="tel12" id="txtTel2" maxLength="3">
  <input type="text" name="tel13" id="txtTel3" maxLength="4">
  <input type="submit" name="btn" id="btn" value="submit">
</form>
Salin selepas log masuk

js:

var textbox1 = document.getElementById("txtTel1");
var textbox2 = document.getElementById("txtTel2");
var textbox3 = document.getElementById("txtTel3");

textbox1.addEventListener("keyup", tabForward);
textbox2.addEventListener("keyup", tabForward);
textbox3.addEventListener("keyup", tabForward);

function tabForward() {
  var target = event.target;
  //当value长度等于最大值的时候
  if (target.value.length == target.maxLength) {
    var form = target.form;
    //遍历所在的form表单中的元素
    for (var i = 0, len = form.elements.length; i < len; i++) {
      //如果该元素是目标元素
      if (form.elements[i] == target) {
        //并且该元素的下一个元素为true 其他条件
        if ((form.elements[i + 1]) && (form.elements[i + 1].nodeType == 1) && (form.elements[i + 1].tagName.toLowerCase() == "input") && (form.elements[i + 1].type == "text")) {
          //则下个元素获得焦点
          form.elements[i + 1].focus();
        }
      }
    };
  }
}

Salin selepas log masuk

六、HTML5约束验证API

1、必填字段required属性

在必填字段中添加属性required。它适用于input,textarea,select字段。使用下面的代码可以检测浏览器是否支持required属性:

var isRequiredSupported="required" in document.createElement("input");
Salin selepas log masuk

2、其他输入类型

input的type属性增加了“email”和“url”;各浏览器也都为它们增加了定制的验证机制:

var input = document.createElement("input");
input.type = "email";
var isEmailSupported = (input.type == "email");
Salin selepas log masuk

3、数值范围

除了“email”和“URL”,HTML5还定义了另外几个输入元素。这几个元素都要求填写基于数字的值:“number”,“range”,“datetime”,“datetime-local”,“date”,“mouth”,“week”,“time”。目前浏览器对这些类型支持并不好,如果真想使用的话要小心。

对这事数值类型的输入元素可以指定min属性,max属性,step属性。同时这些数值类型元素还有两个方法:stepUp(),stepDown()。都接受一个参数,要在当前基础上加上或减去的数值。

DOM:

<form action="">
  <input type="range" name="tel14" id="txtTel4" required min="10" max="20" step="1">
  <input type="button" value="up" id="up">
  <input type="text" id="output">
  <input type="submit" name="btn" id="btn" value="submit">
</form>
Salin selepas log masuk

js:

var input = document.getElementById("txtTel4");
var up = document.getElementById("up");

input.addEventListener("mousemove", function () {
  var output = document.getElementById("output");
  output.value = input.value;
});
up.addEventListener("click", function () {
  //点击value值以2为单位增加
  input.stepUp(2);
  var output = document.getElementById("output");
  output.value = input.value;
});

Salin selepas log masuk

3、输入模式

HTML5新增了pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值。

<input type="text" id="number" pattern="\d{3}">

var num = document.getElementById("number");
console.log(num.pattern); //\d{3}

Salin selepas log masuk

可以使用以下代码来检测浏览器是否支持pattern属性:

var isPatternSupported="pattern" in document.createElement("input");
Salin selepas log masuk

4、检测有效性

使用checkValidity()方法可以检测表单中的字段是否有效。所有表单的字段都有这个方法,如果检查有效返回true。

<form action="">
  <input type="text" pattern="w" id="name" required>
  <input type="number" max="10" id="num" required>
  <input type="button" id="check" value="check">
  <input type="submit" id="submit" value="submit" disabled>
</form>

var form = document.forms[0];
var name = document.getElementById("name");
var number = document.getElementById("num");
var check = document.getElementById("check");
var submit = document.getElementById("submit");

check.addEventListener("click", function () {
  console.log(form.checkValidity()); //检测整个表单是否正确
  if (form.checkValidity()) {
    submit.removeAttribute("disabled");
    check.disabled = true;
  }else{
    alert("请检查表单");
  }
});

Salin selepas log masuk

input的validity属性会给出什么字段有效和无效的具体信息。

var inputName = document.getElementById("inputName");
inputName.onblur = function() {
  if (inputName.checkValidity()) {
    inputName.style.color = "white";
    inputName.style.backgroundColor = "green";

  } else {
    inputName.style.color = "white";
    inputName.style.backgroundColor = "red";
    if (inputName.validity.patternMismatch) {
      inputName.value = "请填写正确的格式";
    }
  }
};
inputName.addEventListener("mouseenter", function () {
  inputName.focus();
  inputName.select();
});

Salin selepas log masuk

Kesahan terutamanya termasuk atribut berikut:

  • customError: sama ada setCustomValidity() ditetapkan
  • Corak Tidak Padan: sama ada ia sepadan dengan atribut corak;
  • rangeOverflow: sama ada ia lebih besar daripada nilai maks;
  • rangeUnderflow: sama ada ia lebih kecil daripada nilai min;
  • stepMisMatch: sama ada saiz langkah adalah munasabah
  • tooLong: sama ada panjang maksimum melebihi
  • typeMismatch: sama ada ia bukan jenis mel dan jenis url;
  • sah: Jika atribut lain di sini palsu, kembalikan benar
  • valueMissing: Jika tiada nilai yang diperlukan, kembalikan benar.
  • 5. Lumpuhkan pengesahan
  • Dengan menetapkan atribut novalidate borang, borang tidak boleh disahkan. Selepas mendapatkan borang menggunakan js, menetapkan atribut novalidatenya kepada benar akan melumpuhkan pengesahan borang. Menambah atribut formnovalidate pada butang hantar tidak akan mengesahkan borang yang diserahkan. Selepas menggunakan js untuk mendapatkan butang hantar, tetapkan atribut formnovalidatanya kepada benar, yang akan melumpuhkan pengesahan borang dan menyerahkannya. Perkara di atas adalah keseluruhan kandungan artikel ini, saya harap ia dapat membantu kajian semua orang.
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan