Javascript onblur
事件将Id
输入元素的html
级联到前面的输入元素,而不是传递他们自己的onblurred元素的id
。
var ruleStringParam = {
ruleset : "",
appid : "",
rule : "",
trigger : {name : "", type : "", timerparams : {repeatEvery : "", scheduleDate : "", scheduleTime : "", expiryDateTime : ""},
state : "", device : "", transit : "", range : ""},
condition : {statement : ""},
action : {type : "", subject : "", object : ""}
}
var buildRuleJSON = function(elementId) {
switch (elementId) {
case 'ruleset':
ruleStringParam.ruleset = document.getElementById(elementId).value;
alert('Id of ruleset: ' + elementId);
case 'appId':
ruleStringParam.appId = document.getElementById(elementId).value;
alert('Id of appId ' + elementId);
case 'rule':
ruleStringParam.rule = document.getElementById(elementId).value;
alert('Id of rule ' + elementId);
default:
alert("default");
}
}
<body style="background-color:powderblue;">
<form id="form1" name="form1">
Ruleset name:<br>
<input id='ruleset' type='text' onblur="buildRuleJSON(this.id)"><br>
AppId:<br>
<input id='appId' type='text' onblur='buildRuleJSON(this.id)'><br>
Rule name:<br>
<input id='rule' type='text' onblur='buildRuleJSON(this.id)'><br>
</form>
</body>
答案 0 :(得分:1)
通过单击输入字段B来模糊输入字段A,然后B接收焦点。
但是因为你正在发射alert
,所以当显示警报时,焦点会从B中移除,因此B的模糊处理程序会触发......
请勿在此处使用alert
。如果您需要调试输出以追溯脚本的确切行为,请改用console.log
,然后检查浏览器控制台。
答案 1 :(得分:1)
你需要摆脱你的情况:
当您编写switch语句时,如果您不break
输出,则继续执行:
switch (elementId) {
case 'ruleset':
ruleStringParam.ruleset = document.getElementById(elementId).value;
alert('Id of ruleset: ' + elementId);
break;
case 'appId':
ruleStringParam.appId = document.getElementById(elementId).value;
alert('Id of appId ' + elementId);
break;
case 'rule':
ruleStringParam.rule = document.getElementById(elementId).value;
alert('Id of rule ' + elementId);
break;
default:
alert("default");
break;
}