2013-12-23 78 views
1

我有7個textfields放在一個表內。這些textfields數據是我在用戶按下提交時從服務器獲得的。在用獲取的數據填充文本字段後,用戶通過新的按鈕提交將該數據提交給服務器。檢查字段是否被編輯?

如果用戶按原樣提交數據,則需要顯示'至少一個字段必須編輯爲'的錯誤消息。如果它至少編輯了一個字段然後提交,我將更新服務器上的數據。

如何檢查用戶是否更改了字段?

問題是我需要存儲用於比較的數據,我必須在JavaScript中使用全局變量(這不是一種好的做法)。

+1

你可以使用data()將其存儲在文本字段中。 – RobAu

+0

而不是將數據存儲在全局變量中,您可以爲每個字段創建隱藏輸入(或data-xx屬性) – lastr2d2

回答

2

您可以創建一個隱藏的輸入(如說@ lastr2d2)名爲haschange like

<input type="hidden" name="haschange" id="haschange" value="0" /> 

並添加jquery或javascript功能,將haschange的值從0更改爲1 當每個textfields發生事件onChange時。例如,你可以創建一個像波紋管的功能:

$(document).ready(function(){ 
    //Check this link 
    $("#textfields1").change(function(){ 
      $("#haschange").val(1); 
    }); 
}); 

最後,當你點擊的最後按鈕提交,那麼你可以檢查是否haschange01

---編輯--- 如果你想檢查原更換(見@antindexer評論),那麼你可以使用下面的代碼

$(document).ready(function(){ 
     //Check this link 
     $("#textfields1").change(function(){ 
      var defaultValue = document.getElementById('textfields1').defaultValue; 
      var currentValue = document.getElementById('textfields1').value; 
      if(currentValue != currentValue ) { 
       $("#haschange").val(1); 
      } 
     }); 
    }); 
+0

如果更改一個值,會發生什麼情況。並改回這個值。在這種情況下,你的代碼將會改變。所以你應該仔細閱讀這個問題。 – Khamidulla

+0

你能告訴我你在哪裏喜歡這樣的事嗎? –

+0

「問題是我需要存儲用於比較的數據,我必須在JavaScript中使用全局變量(這不是一個好習慣)。」 < - 這裏。這意味着他實際上他想要保存所有以前的數據並檢查它。 – Khamidulla

1

你可以這樣做:

將數據屬性添加到您的輸入字段。將「<%= serverValue%>」替換爲您的服務器代碼使用的任何語法。

<form id="form"> 
    <table> 
    <tr> 
     <td><input type="text" value="<%= serverValue %>" data-original-value="<%= serverValue %>" /></td> 
    </tr> 
    </table> 
    <input type="submit" value="submit" /> 
</form> 

,然後將腳本代碼的網頁時像這樣的東西(假設你使用jQuery):

<script> 
    $(function() { 
    var $form = $('#form'); 
    $form.on('submit', function (e) { 
     $(form).find('[data-original-value]').each(function (index, el) { 
     var $el = $(el); 
     if ($el.val() === $el.attr('data-original-value]')) { 
      e.preventDefault(); 
      console.log('please edit at least one value'); 
     } 
     }); 
    }); 
    }); 
</script> 

這裏是一個的jsfiddle - http://jsfiddle.net/X4S4y/1/

1

可以ATTR data-value使用(或任何你想要的名稱),以保持原來的VAL UE

例子:(假定您使用PHP)

<input type="text" value="<?php echo $value_1?>" data-value="<?php echo $value_1?>" class="input_text"> 
<input type="text" value="<?php echo $value_2?>" data-value="<?php echo $value_2?>" class="input_text"> 
<input type="text" value="<?php echo $value_3?>" data-value="<?php echo $value_3?>" class="input_text"> 
<input type="text" value="<?php echo $value_4?>" data-value="<?php echo $value_4?>" class="input_text"> 

在jQuery中,您可以檢查是否有輸入文字的任何變化,然後提交表單

例子:

$(document).ready(function(){ 
    $("form").submit(function(){ 
     var is_changed = false; 
     $(".input_text").each(function(){ 
     if ($(this).val() == $(this).attr("data-value") { 
       return false; 
     } else { 
       is_changed = true; 
     } 
     }); 
     if(is_change == true) { 
     alert("Please change at least one input"); 
     return false; 
     } 
    }); 
})