2012-02-02 62 views
1

我有一個小問題,下面的代碼:關鍵字if語句indexOf字符串作用奇數?

$('#body').keyup(function(){ 
    var i = $('#body').val(); 

    if(i.toLowerCase().indexOf("contact") >= 0){ 
     $('#tosviolation').fadeIn('fast'); 
     $('#sendForm').attr('action','send.php?f=1'); 
     $('.toscontent').html("TOS Breach!"); 
    } else { 
     $('#tosviolation').fadeOut('fast'); 
     $('#sendForm').attr('action','send.php?f=0'); 
    } 

    if(i.toLowerCase().indexOf("@") >= 0){ 
     $('#tosviolation').fadeIn('fast'); 
     $('#sendForm').attr('action','send.php?f=1'); 
    } else { 
     $('#tosviolation').fadeOut('fast'); 
     $('#sendForm').attr('action','send.php?f=0'); 
    } 
}); 

它檢查是否#body(文字區域)包含值「接觸」和/或「@」,如果這個textarea的確實含有說值,它會彈出一個div告訴用戶他們違反了TOS。使用「@」時,當用戶輸入時,框會留在那裏,但當用戶輸入「contact」時,框會閃爍幾次然後消失,我猜是因爲「@」是1個字符長, 「聯繫」是7個字符長,這與此有關。

然後呢,這很奇怪嗎?我只是想讓它只是fadeIn()並保持淡入。我不介意閃光燈,因爲當然,在按鍵時它必須在用戶每次輕觸按鍵時運行該功能,所以這很好,但我可以'當用戶在textarea的某個地方輸入「contact」時,如何保留它。另外,它使用.attr()的另一部分是引導用戶到send.php,如果它包含「contact」,「@」 - 那麼它將它們推送到send.php?f = 1,如果不包含,然後send.php?f = 0 - #sendForm是我早些時候的表單標籤的ID,我認爲這已經很好了。

有沒有人知道如何讓箱子留在那裏,一旦它被拉起與數據「聯繫」?

回答

1

試試這個。請記住,設置表單的屬性並依賴它來進行服務器端處理是危險 - 在發佈之前,最終用戶可以輕鬆地擺弄它。您應該再次使用服務器進行驗證,而不是使用隨窗體一起發送的任何GET變量。

$('#body').keyup(function() { 
    var i = $('#body').val(); 
    if (i.toLowerCase().indexOf("contact") >= 0 || i.toLowerCase().indexOf("@") >= 0) { 
     $('#tosviolation').fadeIn('fast'); 
     $('#sendForm').attr('action', 'send.php?f=1'); 
     $('.toscontent').html("TOS Breach!"); 
    } else { 
     $('#tosviolation').fadeOut('fast'); 
     $('#sendForm').attr('action', 'send.php?f=0'); 
    } 
}); 
1

問題是,當你輸入「contact」時,你沒有「@」符號。因此,您的第一條聯繫人評估爲真,並在#tosviolation中淡出。但是,下一個if語句的計算結果爲false,因此它會立即消失。您需要重構if語句(可能使用OR條件,而不是兩個單獨的if語句)以避免這種情況。

像這樣的東西應該工作:

$('#body').keyup(function() { 
    var i = $('#body').val(); 
    var contact = i.toLowerCase().indexOf("contact"); 
    var atsymbol = i.toLowerCase().indexOf("@"); 
    if (contact >= 0 || atsymbol >= 0) { 
     $('#tosviolation').fadeIn('fast'); 
     $('#sendForm').attr('action', 'send.php?f=1'); 
     if(contact >= 0) { 
      $('.toscontent').html("TOS Breach!"); 
     } 
    } else { 
     $('#tosviolation').fadeOut('fast'); 
     $('#sendForm').attr('action', 'send.php?f=0'); 
    } 
}); 
+0

AHH。謝謝!我只注意到了!乾杯! :) – unicornication 2012-02-02 10:52:25

1
  1. 爲什麼你不只是檢查這個曾經,當字段失去焦點或formsubmit過嗎?這是更容易,更清潔,然後檢查每個keyup事件。

  2. 我強烈建議再次檢查服務器端的輸入。只需簡單地添加f = 1或f = 0即可輕鬆操作。也想想如果用戶禁用js會發生什麼。