我目前有一个带有内联 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
= 'NEW' 和 owner_sel
更改为索引“0”,是否会重新触发第一个函数?
最佳答案
<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
更改为“0”,每次 state_id
为改变了。
if (this.form.state_id.value == <%= $STATE_NEW %> ){
关于javascript - 将带有 Perl 变量的内联 javascript 更改为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021288/