Saya sedang menulis formulir login sederhana menggunakan angularjs dengan beberapa validasi input sisi klien untuk memeriksa bahwa nama pengguna dan kata sandi tidak kosong dan lebih panjang dari tiga karakter. Lihat kode di bawah ini:
<form name="loginform" novalidate ng-submit="login.submit()" class="css-form">
<fieldset>
<div class="control-group input-prepend">
<span class="add-on"><i class="icon-user"></i></span>
<input type="text" ng-model="login.username" name="username" required ng-minlength="3" placeholder="username" />
</div>
<div class="control-group input-prepend">
<span class="add-on"><i class="icon-lock"></i></span>
<input type="password" ng-model="login.password" name="password" required ng-minlength="3" placeholder="" />
</div>
<div class="control-group">
<input class="btn" type="submit" value="Log in">
</div>
</fieldset>
</form>
Dan pengontrolnya:
var controller = function($scope) {
$scope.login = {
submit: function() {
Console.info($scope.login.username + ' ' + $scope.login.password);
}
}
};
Masalahnya adalah bahwa login.submit
fungsi tersebut akan dipanggil bahkan jika inputnya tidak valid. Apakah mungkin untuk mencegah perilaku ini?
Sebagai catatan saya dapat menyebutkan bahwa saya juga menggunakan bootstrap dan requireejs.
angularjs
validation
Runar Halse
sumber
sumber
Jawaban:
Anda dapat melakukan:
Tidak perlu untuk memeriksa pengontrol.
sumber
&&
saya mencoba meneruskan nilainya sebagai bagian dari pengiriman dan mengonfirmasi bahwa nilainya sendiri "salah"Ubah tombol kirim ke:
sumber
Jadi jawaban yang disarankan dari TheHippo tidak bekerja untuk saya, sebagai gantinya saya akhirnya mengirim formulir sebagai parameter ke fungsi seperti:
Ini membuat formulir tersedia dalam metode pengontrol:
sumber
Formulir Anda secara otomatis dimasukkan ke dalam $ scope sebagai objek. Itu dapat diakses melalui
$scope[formName]
Di bawah ini adalah contoh yang akan bekerja dengan pengaturan asli Anda dan tanpa harus menyerahkan formulir itu sendiri sebagai parameter dalam ng-kirim.
Contoh kerja: http://plnkr.co/edit/BEWnrP?p=preview
sumber
if(this.loginform.$invalid)
.. sebagai gantinya tetapi kemudian dalam HTML Anda harus memberikan formulir nama<form name="ctrl.loginform" ..
. Dan itu dengan asumsi Anda menggunakan<div ng-controller="controller as ctrl"..
sintaks-controller Anda. Terima kasih @JoshCarollHTML:
Di controller Anda:
sumber
event.preventDefault()
itu cara untuk pergi, untuk menghentikan pengiriman formulir.Meskipun bukan solusi langsung untuk pertanyaan OPs, jika formulir Anda berada dalam
ng-app
konteks, tetapi Anda ingin Angular mengabaikannya sama sekali, Anda bisa melakukan ini secara eksplisit menggunakanngNonBindable
arahan:sumber
Hanya untuk menambah jawaban di atas,
Saya memiliki 2 tombol biasa seperti yang ditunjukkan di bawah ini. (Tanpa tipe = "kirim" di mana saja)
Tidak peduli berapa banyak saya mencoba, menekan enter setelah formulir itu valid , tombol "Hapus Formulir" dipanggil, membersihkan seluruh formulir.
Sebagai solusinya,
Saya harus menambahkan tombol kirim dummy yang dinonaktifkan dan disembunyikan. Dan tombol boneka ini harus berada di atas semua tombol lain seperti yang ditunjukkan di bawah ini .
Yah, maksud saya adalah tidak pernah mengirimkan pada Enter, jadi peretasan yang diberikan di atas berfungsi dengan baik.
sumber
Saya tahu ini adalah utas lama tapi saya pikir saya juga akan memberikan kontribusi. Solusi saya mirip dengan posting yang sudah ditandai sebagai jawaban. Beberapa pemeriksaan inline JavaScript melakukan triknya.
sumber
Saya tahu ini sudah larut dan dijawab, tetapi saya ingin membagikan hal-hal rapi yang saya buat. Saya membuat arahan validasi ng yang mengaitkan pengiriman formulir, lalu mengeluarkan default-default jika $ eval salah:
Di html Anda:
sumber