[英]alert() triggers form submission
我試圖消除 type=text
上的“ enter event”默認值 ,這會觸發在表單上提交。 我這樣做如下:
var onEnter = function(values){
$("#"+values['id']).keydown(function(e){
if (e.which == 13) {
event.preventDefault();
var function_to_call = window[values['function']];
if(typeof function_to_call === 'function'){
if(values['parameters']!= null){
parameters = values['parameters'];
var args;
if(typeof parameters === 'string')
args = parameters.split(',');
else
args = new Array(parameters);
function_to_call.apply(window, args);
}
else function_to_call();
}
return false;
}
});
}
帶走默認事件重要的代碼是
event.preventDefault();
return false;
其余代碼只調用帶有參數或不帶參數的函數。 問題是在調用的函數內部,有一個條件會觸發警報。 這是交易:
[enter]
不會觸發表單提交 在每個type=text
上調用的函數都是相同的,這是警報條件:
......
if(!regex_match(item)){
alert("Solo son posibles los siguientes caracteres: '.' ',' 'a-z' 'a-Z' '0-9' y ' '");
return;
}
.....
var regex_match = function(text){
regex = /^[_., 0-9a-záéíóúñ]+$/i;
return regex.test(text);
}
嘗試過的事情:
return false;
” alert(...)
; 我是javascript新手,有人能指出為什么會這樣嗎? 提前致謝!
我對此感到非常驚訝(並希望您會發現行為因瀏覽器而異),但是alert
是一個有趣的野獸,與其他瀏覽器環境有些矛盾,所以...
由於您總是想停止默認行為,因此我建議:
無論如何都不要使用alert
,這非常丑陋(使用jQuery的許多“模式”對話框插件中的任何一個,或者只使用樣式固定且絕對定位的div
自己做),或者
從事件處理序列中刪除alert
,如下所示:
var onEnter = function (values) { $("#" + values['id']).keydown(function (e) { if (e.which == 13) { setTimeout(finishHandling, 0); return false; } function finishHandling() { var function_to_call = window[values['function']]; if (typeof function_to_call === 'function') { if (values['parameters'] != null) { parameters = values['parameters']; var args; if (typeof parameters === 'string') args = parameters.split(','); else args = new Array(parameters); function_to_call.apply(window, args); } else function_to_call(); } } }); }
第二個選項的作用是讓事件處理程序在您調用alert
之前完成,方法是調度對finishHandling
的回調幾乎立即發生,但要在事件處理完成之后進行。 (我還刪除了對event.preventDefault()
的調用,因為return false;
從jQuery事件處理程序中return false;
event.preventDefault()
和event.stopPropagation()
。當alert
在那里時,您可能需要它,但您沒有不是沒有。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.