我目前有一个带有内联onChange属性的select
标记,如下所示:
<select id="owner_sel" name="owner"
<% print ' style="display: none"' if(!$user->has_permission($task->cid, $PERMISSION_CHANGE_OWNER)); %>
onChange="if(!this.selectedIndex == 0) {
if(this.form.state_id.value == <%= $STATE_NEW %>) {
this.form.state_id.value = <%= $STATE_ASSIGNED %>
}
} else {
this.form.state_id.value = <%= $STATE_NEW %>
}">
<option></option>
<%
foreach my $h (@sorted_users){
foreach my $uid (keys %{$h}) {
my $selected = ($uid == ($form->{owner} || $task->owner)) ? 'selected="selected"' : '';
print qq{<option value="$uid" $selected>$h->{$uid}</option>};
}
}
%>
</select>
我希望将其转移到这样的函数中:
<script>
// code...
</script>
我是javascript的新手,我也不知道是否可以在javascript函数中以相同的方式调用Perl变量?
修改
<script>
$(document).on('change', '#owner_sel', function() {
if(!this.form.owner_sel.selectedIndex == 0) {
if(this.form.state_id.value == <%= $STATE_NEW %>) {
this.form.state_id.value = <%= $STATE_ASSIGNED %>
}
} else {
this.form.state_id.value = <%= $STATE_NEW %>
}
});
$(document).on('change', '#state_id', function() {
if (this.form.state_id.value = <%= $STATE_NEW %> ){
this.form.owner_sel.selectedIndex = 0;
}
});
</script>
---------- -----------问题
我将我的代码重写为类似的东西。当它只是一个函数时,一切正常,但是当我将两个脚本都包含在上面的代码片段中时,就会出现错误。
我想知道,在我的第二个功能中state_id
=&#39; NEW&#39;并且owner_sel
更改为索引&#39; 0&#39;那会重新触发第一个函数吗?
答案 0 :(得分:2)
<script>
$(document).on('change', '#owner_sel', function() {
if(!this.form.owner_sel.selectedIndex == 0) {
if(this.form.state_id.value == <%= $STATE_NEW %>) {
this.form.state_id.value = <%= $STATE_ASSIGNED %>
}
} else {
this.form.state_id.value = <%= $STATE_NEW %>
}
});
$(document).on('change', '#state_id', function() {
if (this.form.state_id.value == <%= $STATE_NEW %> ){
this.form.owner_sel.selectedIndex = 0;
}
});
</script>
你翻译的方式是正确的。是的,Perl变量可以像调用内联一样调用javascript函数。
您的代码存在冲突的原因是因为.on('change', '#state_id'
代码中的第二行代码使用了单个'='而我认为您打算使用'=='来检查状态是否为'NEW ”。现在你的方式只会在owner_sel.selectedIndex
发生变化时将state_id
更改为'0'。
if (this.form.state_id.value == <%= $STATE_NEW %> ){