javascript - 将带有 Perl 变量的内联 javascript 更改为函数

标签 javascript perl

我目前有一个带有内联 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/

相关文章:

javascript - 如何在 ifc.js 中加载多个文件

javascript - 将表单 Ajax 发送到 Controller 错误 404 C#

在显示图像之前预加载图像的 JavaScript 方法不起作用

perl - Perl中的@ $变量是什么?

arrays -\@array 在 Perl 中是什么意思?

javascript - HTML div 切换可见性不起作用

javascript - 定义和访问 HTML 元素的服装属性

mysql - 如何在 perl 中为查询引用字符串?

lwp - 不带命名参数的 REST HTTP DELETE

java - 根据当前文本压缩修订历史记录