2015-04-16 34 views
0

我正在嘗試在輸入中設置用戶名。它填充輸入並運行按鍵事件,但它不會將ng-pristine更改爲ng-dirty。任何想法?如何以編程方式將ng-pristine設置爲使用jQuery的ng-dirty?

我的代碼:

var username = ["u", "s", "e", "r"]; 

$("#username").keypress(function(event) { 
    var key = event.keyCode || event.which; 
    $('#username').val($('#username').val() + String.fromCharCode(key)); 
}); 

for (var i=0;i< username.length;i++){ 
    var c = username[i]; 
    $('#username').trigger(jQuery.Event('keypress', {which: c.charCodeAt(0)})); 
}; 
+0

'$ scope.formName。$ setPristine()'需要調用 –

+0

你在控制器裏面運行它嗎? – mohamedrias

+0

該網站不是我的,我只是嘗試使用螢火蟲命令行登錄到它。 – SalmanShariati

回答

2

由於您正在使用角度範圍,因此需要手動觸發$scope.$apply()才能觸發更改。您也必須手動設置標誌setDirty()

獲取當前正在處理的控制器範圍的參考。

var scope = angular.element(document.querySelector("controllerSelector")).scope(); 

現在在您的按鍵事件中,觸發摘要循環。

var username = ["u", "s", "e", "r"]; 

$("#username").keypress(function(event) { 
    var key = event.keyCode || event.which; 
    $('#username').val($('#username').val() + String.fromCharCode(key)); 
    scope.$apply(); 
}); 

for (var i=0;i< username.length;i++){ 
    var c = username[i]; 
    $('#username').trigger(jQuery.Event('keypress', {which: c.charCodeAt(0)})); 
    scope.$apply(); 
}; 

這必須主要解決您的問題。否則,您可能需要手動觸發setDirty()。在範圍內指向表單並設置髒標誌。

scope.formName.$setDirty(); 
+0

你能提一下「controllerSelector」是什麼意思? – SalmanShariati

+0

你添加了哪個dom元素ng-controller指令,CSS選擇器 – mohamedrias

+0

它說「範圍未定義」 – SalmanShariati

-1

你爲什麼混合jQuery和角?你永遠不應該那樣做。如果你想聽更改事件或點擊。將ng-click或ng-change附加到dom元素上,或者在控制器中設置$ watch來監聽模型的任何更改。在同一個項目中混合使用jquery選擇器和角色是一個糟糕的做法。 Angular擁有你想要擺脫jQuery的所有功能。

+0

爲什麼不呢?它可以使用它 – Shaxrillo

+0

我正在嘗試構建一個機器人來填充表單,就像人類一樣。你的想法是什麼? – SalmanShariati

+0

不是這種情況。它更適合於當你制定指令和定製類似的東西時。如果你在控制器中執行類似邏輯的操作,那就不好了,因爲jquery選擇器可以將自己附加到其他元素上。處理角度項目時,這是不恰當的做法。它意味着一個完整的框架,而不是一個你從中獲取零碎的圖書館。 下面是一個體面的文章,詳細說明原因:http://tech.zumba.com/2014/08/02/angularjs-forget-jquery/ – Steve

相關問題