1
<input type="checkbox" id = "has_sidebar" name="cb" value="" onclick="result=$(this).attr('value', this.checked ? 1 : 0); alert('my result : 'result.context.value);" >

RESULT.CONTEXT.VALUEチェックボックス (0または1) の値を持ちます。

それをperl変数に割り当てるにはどうすればよいですか?
これがコードです。

<%class>
use JSON;
use URI::Escape;

has 'data';
has 'cb'        => ( isa => 'Array');
</%class>

<%init>
my $args = eval {
        return from_json(uri_unescape($.data), { ascii => 1});
};
$m->redirect('/login') unless $USER && $USER->{'logged_in'};
$args->{'authors'} = [] unless $args->{'authors'} && ref($args->{'authors'}) eq 'ARRAY';
</%init>

<li class="header">
        <p>
                Authors
                &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
                &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
                show sidebar
        </p>
</li>
%  my @author_box = ();

% foreach my $a (sort { $a->{'last_name'} cmp $b->{'last_name'} || $a->{'first_name'} cmp $b->{'first_name'} } @{$args->{'authors'}}) {
<li>
        <p>
                <a href="javascript:void(0)" onclick="remove_author(<% $a->{'id'} %>);" class="right icon-small icon-delete-small"></a>
                <% $a->{'last_name'} %>, <% $a->{'first_name'} %> (<% $a->{'initials'} %>)

                &emsp;&emsp;&emsp;&emsp;
                &emsp;&emsp;&emsp;&emsp;
                <input type="checkbox" id = "has_sidebar" name="cb" value="" onclick="result=$(this).attr('value', this.checked ? 1 : 0); alert('id : <% $a->{'id'} %> - checked: ' + result.context.value);" >

        </p>
</li>

% # put the value of the checkbox in array
<script type="text/javascript">
<% $.cb %> = result.context.value  //this is not the RIGHT WAY!!!
var hsb = [];
hsb.push({ <% $a->{'id'} %>: <% $.cb %> });
</script>

% }
<li>
        <p>
                <input type="submit" value="Add" class="right" onclick="add_author();"/>
                <input id="new_author" style="width:75%;" />
                <input type="hidden" id="new_author_data" />
        </p>
</li>
4

1 に答える 1

2

私があなたの質問を正しく理解している限り:

perl はサーバー側で実行され (html+javascript を構築)、javascript はクライアント側で実行されるため、javascript から perl に値を直接渡すことはできません。perl->javascript から値を渡すことはできますが、その逆はできません。

サーバー側で処理されるフォーム送信または AJAX 呼び出しのいずれかが必要です。

ワークフロー:

  1. サーバー側の処理 (あなたの場合は perl を実行しています) - ページの構築
  2. クライアントに届ける
  3. クライアント側のもの - JavaScript の実行
  4. フォームまたは AJAX リクエストを介してサーバーに結果を返す
  5. 結果の処理 (いくつかの perl を再度実行)

編集:

フォーム処理と AJAX に関するすべては、インターネットと Stackoverflow で何百回も書かれています。

読む必要があるのは、フォーム処理と AJAX です。

また、jquery には非常に有能な ajax スイートがあり、多くの作業を節約できるため、jquery のドキュメントを調べることをお勧めします。

Perl によるフォーム処理

Perl を使用したフォーム処理に関するもう 1 つの初心者向けガイド

jQuery Ajax セクション

jQuery Ajax 呼び出し

または、グーグルで好きなところを読んでください。

于 2012-05-31T14:22:16.737 に答える