2012-06-01 64 views
0

只是關於這個問題我有一個簡短的問題。我使用jeditable來編輯頁面上的某些字段。這是完美的。現在我想實施一些數據檢查。我有我的php代碼來檢查輸入的數據,如果它正確,它會更新該數據庫,如果不是,它會返回錯誤。我遇到的問題是我希望它吐出錯誤來告訴他們,但當他們再次單擊該字段進行編輯時,它會在字段中顯示錯誤,直到頁面刷新。我希望它做的是在發生錯誤後點擊該字段時具有相同的數據,而不必刷新頁面,然後再次單擊該字段進行編輯。也許有一種方法可以返回錯誤並將其傳遞到字段上方的某種工具提示中?當然,jeditable的工作方式是div圍繞字段,然後我有一些js調用了我的update.php文件,它解析了什麼可jeditable傳遞給它,並返回一個$ value來檢查錯誤,默認情況下它是否正常只需在PHP的「return $ value」的底部;在保存在數據庫中之後將其放回現場。PHP JQuery和Jeditable

希望有人能夠理解我在這裏問的和任何援助將不勝感激。

回答

0

最簡單的方法可能是做一些客戶端驗證。現在你正在通過PHP提交表單提交時進行服務器端驗證。你在檢查什麼?沒有代碼很難給你一個客戶端驗證的好例子。

基本場檢查:

var check_field = $("#field").val(); 
if (!check_field) { alert("Error message"); } else 
{ 
    // submit POST or whatever 
} 

編輯

由於MAC地址驗證算法已經寫入服務器端,我建議調用檢查功能的單獨的AJAX POST請求。把這個請求的結果(真,假)和檢查它的客戶端。如果爲true,則繼續進行更新調用。

例子:

$("#form").submit(function() { 
var mac = $("#macfield").val(); 
if (!mac) { alert("MAC address can't be empty!"); } else 
{ 
    $.POST("checkmacaddress.php", {macval: mac}).success(function(a){ 
     //assuming a comes back as a bool 
     if (!a) { alert("Invalid MAC!"); } else 
     { 
      // if the checker returned true, update the record 
      $.POST("update.php" ...); 
     } 
    }); 
} }); 

這不包括checkmacaddress.php但你應該能夠處理,如果你手頭上已經有該功能。

+0

檢查用戶是否輸入一個有效的MAC地址...我有一個函數在PHP中「IsValidMACAddress($ mac);」並返回true或false。 – John

+0

謝謝。我明白了所有這一切,並做了這樣的事情,唯一的問題是攔截JS的JEDITABLE部分,以便如果MAC無效,則根本不處理。可以內聯編輯的每個單元格都是由$(「。edit_mac」).editable(「edit_mac.php」)定義的......我可以攔截表單的提交以檢查mac地址,但可編輯部分仍然繼續,將錯誤返回到單元格中,而不是將其保留在已經存在的數據中。不確定是否它在檢查提交時檢查mac,如果OK然後可繼續執行,否則顯示錯誤,在那裏保留原始數據。 – John

0

討厭當我這樣做,在這裏發帖然後找出答案我自己......但至少如果有人有同樣的問題,他們會看到它。我發現了關於jeditable onsubmit函數......我在編輯字段時使用工具提示來顯示懸停,所以這會將工具提示設置爲錯誤,並且不會提交數據,除非其有效的mac。

function isMAC(value) { 
      teststr = value; 
      regex=/^([0-9a-f]{2}([:-]|$)){6}$|([0-9a-f]{4}([.]|$)){3}$/i; 
      if (regex.test(teststr)){ 
        return true; 
      } 
      else { 
        return false; 
      } 
    } 

    $(".edit_mac").editable("edit_mac.php", { 
      onsubmit: function(settings, data) { 
        var input = $(data).find('input'); 
        var value = input.val(); 
       if (isMAC(value)) { 
          return true; 
       } else { 
          //display your message 
          $("#tooltip").html("Bad MAC Address..."); 
          return false; 
        } 
      }, 
      indicator : "Saving...", 
      submitdata: { _method: "put" }, 
      submit : 'Save', 
      cssclass : "editable", 
      type : "text" 
    });