使用bookmarklet填充表单在angularjs中不起作用

时间:2014-11-05 21:19:44

标签: angularjs bookmarklet

我有一个只有一些简单的表单输入填充的书签,但是角形仍然处于无效状态。就像没有任何改变一样。

我尝试调用el.onchange(),但似乎没有做任何事情。

javascript:populate();

function populate(){
    var name = document.querySelector('input[name=name]');

    name.value = 'Fred';

    name.click();
    name.onchange();
}

2 个答案:

答案 0 :(得分:1)

由于我已经加载了jQuery,因此能够通过触发input事件来解决问题。

$('input[ng-model]').trigger('input');

答案 1 :(得分:0)

我使用类似于下面代码的东西来创建我的书签。 要考虑的事情。

  • 编写您的函数(参见下面的示例)
  • 在创建书签之前,请在Chrome控制台中测试您的功能
  • 功能测试,现在删除终结线(例如"替换所有"在intellij中(启用正则表达式),用""替换" \ n"
  • 在浏览器中创建新书签
  • 修改网址,网址应该以" javascript:" 开头,然后粘贴你的一行网址...你最终会得到像" javascript :( function(){..." 等......



//nb: This function is not written to work in this page

(function () {
	//get the scope object for your controller
	var sc=angular.element("[ng-controller=myController]").scope();
	
	//grab your model
	var m=sc.mymodel;
	
	//some 'dodgy' date strings :)
	var today=new Date();
	var todayAsString=today.toLocaleDateString("en-GB");
	today.setDate(today.getDate()-183);
	var sixMonthsAgoStr=today.toLocaleDateString("en-GB");
	today.setDate(today.getDate()+365);
	var sixMonthsLaterStr=today.toLocaleDateString("en-GB");
	
	//pick a random oz state
	var states=["WA", "VIC","SA", "NT","NSW", "ACT", "QLD"];
	var ozState=states[Math.floor(Math.random()*(6)+1)];
	
	//update the model with some semi random values 
	m.actionDate=todayAsString;
	m.ausstralianState=ozState;
	m.streetNum=Math.floor((Math.random() * 1000) + 1);
	m.ID="CR" + Math.floor((Math.random() * 10000) + 1);
	m.manufactureYear="" + Math.floor(Math.random()*(2016-1960+1)+1960); //approx... between 1960 and 2016... 
	m.endDate=sixMonthsLaterStr;
	m.startDate=sixMonthsAgoStr;
	
	//MUST call $scope.apply() at the end.
	sc.$apply();
})();