1

複数ページのドキュメントがありますが、htmlを表示し、1つのphpファイル内の単一ページの検証を行っています。

<div id="checkPage" data-role="page">
  <div data-role="header">
    <h1>Page Title</h1>
  </div>
  <div data-role="content">
    <?php
    $form = $_REQUEST['form'];  //this is simply a hidden input in my form that I reference to know if a form submission has occurred
    if($form) {
      $res = process();
      if(is_array($res)) { //if the data is an array then it is an array of errors that I will display to the user
        $html = page($res); 
      } else {
        $html = $res;  //if the data is not an array then it is confirmation html that the request was successful.
      }
    } else {
      $html = page();
    }
    echo $html;
    ?>
  </div>
</div>

私のpage()関数では、HTMLの後にjqueryを追加しています。

$detail .= chr(10) . '<script type="text/javascript">';
$detail .= chr(10) . '$( "#checkPage" ).bind( "pageinit",function(event){';
$detail .= chr(10) . '  $("#txtAmount").change(function(){';
$detail .= chr(10) . '    alert("INSIDE");';
$detail .= chr(10) . '  });';
$detail .= chr(10) . '});';
$detail .= chr(10) . '</script>';
return $detail;

ページに移動して金額テキストボックスに入力(およびそのまま)すると、アラートが表示されます。また、ページ(別のページにリダイレクトされている場所)のキャンセルボタンをクリックしてから、メニューのハイパーリンクから再度戻り、テキストボックスをもう一度入力(および終了)すると、アラートが表示されます。ただし、フォームを送信し、検証エラーを検出してページを再表示すると、pageinitが再度設定されません。pageinitロジックを省略しても、変更イベントは設定されなくなります。

私は何が間違っているのですか?私は私が得ることができるどんな助けにも感謝します。

4

2 に答える 2

2

DOMを変更すると、実際にはまったく新しい要素のセットが得られます。元のDOM要素が存在しなくなったため、置き換えられた要素にバインドされたイベントはなくなりました。jQueryFAQを参照してください

http://docs.jquery.com/Frequently_Asked_Questions#Why_do_my_events_stop_working_after_an_AJAX_request.3F

jQuery.liveを使用して、現在および将来一致する要素にバインドできます。

http://api.jquery.com/live/

または、ここで概説するように、バインディングロジックを共通の関数に配置し、Ajaxの成功後に呼び出すことができます。

http://jetlogs.org/2009/01/29/re-binding-jquery-events-on-ajax-callbacks/

于 2012-06-06T17:45:53.133 に答える
0

これが最終的に機能したものです。エリックJ.は私を正しい軌道に乗せました。

$detail .= chr(10) . '<script type="text/javascript">';
$detail .= chr(10) . '$("#txtAmount").die("change");';
$detail .= chr(10) . '$( "#txtAmount" ).live( "change",function(event){';
$detail .= chr(10) . '  alert("CHANGE");';
$detail .= chr(10) . '});';
$detail .= chr(10) . '</script>';

ダイがなければ、私が離れて戻ってきた場合、それは複数回呼び出されます。ただし、ライブがないと、フォームの送信後に機能しません。

于 2012-06-06T23:36:01.653 に答える