2011-04-04 143 views
0

在此函數中,基於輸入的值,表單提交是真/假。爲什麼在這個函數中不能返回true?表單提交

基本上,我的if語句在表單輸入中測試問號。如果有人在那裏,那麼我不希望表單提交給search.php。如果一個問號不存在,其他句子,然後我想要表單提交到search.php。我嘗試使用return true;使.form1提交,但它沒有工作。然後我嘗試$('。form1')。submit(),但是這使得它在提交按下之前提交。

   <script> 

      $(".askInput").keyup(function() { 

       if ($(this).val().indexOf("?") != -1) { 

        $(this).css({"color" : "#00bfff", 'border-top-right-radius' : '0px', 'border-bottom-right-radius' : '0px', '-moz-border-top-right-radius' : '0px', '-moz-border-bottom-right-radius' : '0px', '-webkit-border-top-right-radius' : '0px', '-webkit-border-bottom-right-radius' : '0px'}); 

        $('.searchEnter').stop().animate({ 
        marginLeft: "310px" 
        }, 200); 
        $('.form1').submit(function() { 
         return false; 
         }); 


       } else { 

        $(this).css({"color" : "#333", 'border-top-right-radius' : '5px', 'border-bottom-right-radius' : '5px', '-moz-border-top-right-radius' : '5px', '-moz-border-bottom-right-radius' : '5px', '-webkit-border-top-right-radius' : '5px', '-webkit-border-bottom-right-radius' : '5px'}); 

        $('.searchEnter').stop().animate({ 
         marginLeft: "250px" 
         }, 200); 
        $('.form1').submit(function() { 
         return true; 
         }); 

       } 
      }); 

      </script> 
+1

預期的結果是什麼以及「不起作用」? – deceze 2011-04-04 05:14:33

+0

預期的結果是,form .form1應該提交。所以這不起作用。相反,它仍然沒有提交。它基本上像else語句中的所有內容都可以工作,除此之外: $('。form1')。submit(function(){ return true; }); – hubrid 2011-04-04 05:16:28

+0

[\ [jquery \]表單提交可能的重複](http://stackoverflow.com/questions/5535035/jquery-form-submit) – Blender 2011-04-04 06:16:21

回答

1

而不是不斷改變窗體的提交處理程序,爲什麼不提交時檢查問號?

$('.form1').submit(function() { 
    if ($('.askInput').val().indexOf("?") != -1) return false; 
}); 

$(".askInput").keyup(function() { 

    if ($(this).val().indexOf("?") != -1) { 

    $(this).css({ 
     "color": "#00bfff", 
     'border-top-right-radius': '0px', 
     'border-bottom-right-radius': '0px', 
     '-moz-border-top-right-radius': '0px', 
     '-moz-border-bottom-right-radius': '0px', 
     '-webkit-border-top-right-radius': '0px', 
     '-webkit-border-bottom-right-radius': '0px' 
    }); 

    $('.searchEnter').stop().animate({ 
     marginLeft: "310px" 
    }, 200); 
    } else { 

    $(this).css({ 
     "color": "#333", 
     'border-top-right-radius': '5px', 
     'border-bottom-right-radius': '5px', 
     '-moz-border-top-right-radius': '5px', 
     '-moz-border-bottom-right-radius': '5px', 
     '-webkit-border-top-right-radius': '5px', 
     '-webkit-border-bottom-right-radius': '5px' 
    }); 

    $('.searchEnter').stop().animate({ 
     marginLeft: "250px" 
    }, 200); 
    } 
}); 
+0

啊,我寧願它是不斷的。 – hubrid 2011-04-04 06:09:38

+0

爲什麼,我可以問一下? – Blender 2011-04-04 06:11:58

+0

Ohhhh我明白了。沒關係,這可能會奏效。 – hubrid 2011-04-04 06:13:08

0
$('.form1').submit(function() { 
    return true; 
}); 

這種結合,只是返回truesubmit事件的功能。即在此之後,當您提交表單時,函數將返回true。就是這樣。

這裏的manual entry

.submit(handler(eventObject))
handler(eventObject)每次事件觸發時執行的函數。


如果你只是想提交表單,使用$('.form1').submit()。如果您不想提交表格,請不要撥打.submit()。即:

if (...) { 
    ... 
    // don't call submit 
} else { 
    ... 
    $('.form1').submit(); 
} 
+0

好吧,等等,我希望函數不要在「if」上提交,並在「else」上提交。所以如果函數沒有提交if(這是我想要的),我該如何做,而不是提交其他。 – hubrid 2011-04-04 05:25:26

+0

@hubrid只要**不要**在「if條件」中提交表單,**不要**調用'.submit()'。調用'.submit()'提交表單,而不是調用它。當您要提交表單時,只需在「'else'條件」中調用'.submit()'。 – deceze 2011-04-04 05:27:44

+0

$('。form1')。submit();這使得它在用戶甚至點擊輸入之前提交。 – hubrid 2011-04-04 05:30:21

0

使用submit不帶任何參數:$('.form').submit()

+0

這使得它在用戶甚至點擊輸入之前提交。我需要它在用戶按下輸入時提交。 – hubrid 2011-04-04 05:29:31

0

我覺得要防止表單提交當askInput項是​​無效的。

當您將提交處理程序綁定到表單時,它始終是附加的,所以每次運行keyUp處理程序時,都會向表單添加一個額外的提交處理程序。其中之一必然會「返回錯誤」,阻止表單提交。

取而代之,也許可以禁用提交按鈕或向表單添加一個「無效」類,並添加一個表單提交處理程序,以確保表單沒有無效類。

例如爲:

<form> 
    <input name="ask" /> <input type="submit" /> 
</form> 
<script> 
$('form').submit(function(e) { 
    if ($(this).hasClass('invalid')) { 
    e.preventDefault(); 
    } 
}); 
$('input[name="ask"]').keyup(function(e) { 
    if ($(this).val().indexOf("?") != -1) { 
    // ... 

    $(this.form).addClass('invalid'); 
    // or 
    $(':submit', this.form).attr('disabled', 'disabled'); 
    } else { 
    // ... 

    $(this.form).removeClass('invalid'); 
    // or 
    $(':submit', this.form).removeAttr('disabled'); 
    } 
}); 
</script> 

或者,用實戰檢驗jQuery驗證庫像jQuery ketchup

+0

無論如何,我可以通過更改表單來提交/刷新頁面,並且不會提交/不刷新頁面嗎? – hubrid 2011-04-04 05:44:15

+0

這就是上面的代碼示例。你想提交什麼時候?「進入了嗎?如果是這樣,只需使用:'$('input [name =「ask」]')。keyup(function(e){if($(this).val()。indexOf(「?」)!= -1) {$(this.form).submit();}});' – sj26 2011-04-04 05:45:03

+0

是的,事情是,用$(this.form).submit();表單在用戶按下Enter之前提交。它提交實時...如果這是有道理的。 – hubrid 2011-04-04 05:47:24

0

嘗試。

$('.form1').submit(function (e) { 
    if ($('.askInput').val().indexOf("?") != -1) { 
    e.preventDefault(); 
    } 
    $(this).submit(); 
}); 
+0

如果我使用它,它會提交else(這是好的),但它也開始提交if(這不好)。 – hubrid 2011-04-04 06:06:43

0

什麼攪拌機想告訴你(煙雨所有的jQuery的巫術,如果你喜歡那種事)是添加一個偵聽器表單提交的事件,看起來在輸入並返回false如果有一個?那裏。簡單地說,POJS條款:

<form onsubmit="return validateInput(this);"> 
    <input name="foo" value="?"> 
    <input type="submit"> 
</form> 

<script type="text/javascript"> 
    function validateInput(form) { 

    if (/\?/.test(form.foo.value)) { 
     // value has a ?, ask user to fix it 
     alert('Get rid of ? knucklehead!!'); 

     // cancel submit 
     return false; 
    } 
    } 
</script>