使用Perl变量将内联javascript更改为函数

时间:2014-07-29 17:18:03

标签: 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 =&#39; NEW&#39;并且owner_sel更改为索引&#39; 0&#39;那会重新触发第一个函数吗?

1 个答案:

答案 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 %> ){