2012-07-05 155 views
0

我正在使用struts1.3.8。我使用struts ValidatorPlugIn來生成客戶端和服務器端驗證消息。
現在,客戶端JavaScript由驗證器插件生成。如果有任何驗證錯誤,它將顯示在警報消息中。但我想在文本字段之外顯示它們。
我現在還在使用警報消息。但現在需求已更改。我試過但沒用...
怎麼辦?
這是插件在屏幕上顯示javascript驗證消息而不是提示消息?

 
    `enter code here` function jcv_handleErrors(messages, focusField) { 
      if (focusField && focusField != null) { 
       var doFocus = true; 
       if (focusField.disabled || focusField.type == 'hidden') { 
        doFocus = false; 
       } 
       if (doFocus && 
        focusField.style && 
        focusField.style.visibility && 
        focusField.style.visibility == 'hidden') { 
        doFocus = false; 
       } 
       if (doFocus) { 
        focusField.focus(); 
       } 
      } 
      alert(messages.join('\n')); 
     }
+0

,你能否告訴我們處理警報的代碼的一部分? – 2012-07-05 11:02:48

回答

2

沒有具體的信息,所有我真的可以認爲是以下的變化而產生的代碼:

window.alert = function(message){ 
    console.log(message); 
} 

JS Fiddle demo

這只是確保傳遞給alert()的任何消息都會被傳遞給console.log()

你可以,而是針對消息的特定元素:

window.alert = function(message) { 
    var output = document.getElementById('output'), 
     newTextContainer = document.createElement('p'), 
     text = document.createTextNode(message); 
    newTextContainer.appendChild(text); 
    output.appendChild(newTextContainer); 
} 

JS Fiddle demo。不過,使用其中任何一種方法都會破壞頁面中您的alert()函數的使用。所以我建議,相反,創建一個新的函數(後面的例子)(正上方)並調用該函數,而不是覆蓋alert()

至於創建自定義函數來處理你的提醒,以及指定的特定元素到新的「警告」應附加:

function newAlert(message, elem) { 
    // message is a string containing the message to display. 
    // elem is the id of the element into which the message should be displayed, 
    // defaults to an id of 'output' if no element is specified. 
    var output = elem ? document.getElementById(elem) : document.getElementById('output'), 
     newTextContainer = document.createElement('p'), 
     text = document.createTextNode(message); 
    newTextContainer.appendChild(text); 
    output.appendChild(newTextContainer); 
} 

JS Fiddle demo


響應編輯從OP質疑,如下所示:

下一頁再次提交我要覆蓋以前的錯誤消息的形式。不會兩次顯示相同的消息。

有幾種方法可以做到這一點,假設您只想顯示最後一條錯誤消息,而不是附加這些錯誤消息;在第一個例子中我使用while循環以除去output元件的firstChild,並且當空,追加新的錯誤消息:

function newAlert(message, elem) { 
    var output = elem ? document.getElementById(elem) : document.getElementById('output'), 
     newTextContainer = document.createElement('p'), 
     text = document.createTextNode(message); 
    while (output.firstChild){ 
     output.removeChild(output.firstChild); 
    } 
    newTextContainer.appendChild(text); 
    output.appendChild(newTextContainer); 
} 

JS Fiddle demo

另一種方法是讓在output元素第一款元素的引用(如果存在的話,否則,創建一個),然後簡單地覆蓋在該元素的文本:

function newAlert(message, elem) { 
    var output = elem ? document.getElementById(elem) : document.getElementById('output'), 
     textContainer = output.getElementsByTagName('p')[0] || output.appendChild(document.createElement('p')); 

    if (textContainer.firstChild){ 
     textContainer 
      .firstChild 
      .nodeValue == message; 
    } 
    else { 
     textContainer 
      .appendChild(document 
         .createTextNode(message)); 
    } 
} 
+0

非常感謝大衛......它像任何事情一樣工作......我得到了我期待的...... – 2012-07-05 11:35:05

+0

非常受歡迎;我很高興得到了幫助! =) – 2012-07-05 11:35:58

+0

嗨大衛,我們可以覆蓋錯誤信息? – 2012-07-05 12:28:19