簡體   English   中英

alert()觸發表單提交

[英]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;

其余代碼只調用帶有參數或不帶參數的函數。 問題是在調用的函數內部,有一個條件會觸發警報。 這是交易:

  1. 如果未觸發警報 ,則[enter]不會觸發表單提交
  2. 如果觸發警報,則觸發表單提交

在每個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是一個有趣的野獸,與其他瀏覽器環境有些矛盾,所以...

由於您總是想停止默認行為,因此我建議:

  1. 無論如何都不要使用alert ,這非常丑陋(使用jQuery的許多“模式”對話框插件中的任何一個,或者只使用樣式固定且絕對定位的div自己做),或者

  2. 從事件處理序列中刪除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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM