2010-03-18 61 views
2

我有一個窗體,它是在我用來更新用戶詳細信息的ajaxed模式中調出的。當負載模式我稱之爲一個js函數:jQuery ajaxForm「h is undefined」問題

teamCreate: function() { 
$j("#step1,form#createEditTeam").show(); 
$j("#step2").hide(); 
var options = { 
type: "get", 
dataType: 'json', 
    beforeSubmit: before, // pre-submit callback 
    success:  success // post-submit callback 
    }; 
$j("form#createEditTeam").ajaxForm(options); 

function before(formData, jqForm, options){ 
var valid = $j("form#createEditTeam").valid(); 
if (valid === true) { 
    $j(".blockMsg").block({ message: $j('#panelLoader') }); 
     return true; // submit the form 
} else { 
    $j("form#createEditTeam").validate(); 
    return false; // prevent form from submitting 
} 
}; 

function success(data){ 
if (data.status == "success") { 
    $j(".blockMsg").unblock(); 
} else { 
    // 
} 
}; 

function error(xhr, ajaxOptions, thrownError){ 
alert("Error code: " + xhr.statusText); 
}; 
} 

當我第一次提交表單,無論多少次的模式打開和關閉這一切正常。但是,如果我提交表單,然後再次打開該模式,並嘗試重新提交表單,我得到一個js錯誤:

h is undefined

+1

我在代碼中看不到'h' ...錯誤是否會引用文件和行號? – Jeremy 2010-03-18 01:11:31

+1

'h'是jQuery庫中的一個變量集。 Firebug報告導致問題的行是: (function(b){function s(c,a){var e = c == ... etHack:4}; var k = null,m = []}})(jQuery的); 我假設'h'是jQuery指定爲DOM對象的東西,但我無法弄清楚爲什麼它沒有正確分配。 – Simon 2010-03-18 01:27:15

回答

4

要更快速地調試此,我強烈建議改變了縮小的版本使用完整版本的JQuery庫,然後再次運行您的代碼。你很難用縮小的版本來找出問題的根源,但是如果你有完整的版本運行,你肯定會發現它更容易調試。變量和函數名稱會更有意義。

+0

所以事實證明,問題不是jQuery本身,而是我正在使用的blockUi插件。它刪除它在消息數組中使用的DOM元素,並且在它自己刪除自身後不會將其放回,以便在後續觸發器發生blockui錯誤時找不到DOM元素。 Eugh。 – Simon 2010-03-19 20:47:34