1

私はphpでこのコードを書きました:

public function getinfo($username){
        $this->autoRender = false;
        if($this->request->is('ajax')){
            if(!ereg('^[A-Za-z0-9_.]+$',$username)){
                echo 'username';
            }
            else{
                $user = $this->User->find('all',array('conditions'=>array('User.username'=>$username)));
                if(empty($user)){
                    echo 'Fail';
                }
                else{
                    $this->loadModel('Question');
                    $question = $this->Question->find('all',array('conditions'=>array('Question.id'=>$user[0]['User']['questionid'])));
                    echo 'Sec Question : ' . $question[0]['Question']['title'] . '<br />';
                    echo 'Answer: <input type="text" id="userAnswer" class="loginField" name="data[answer]" /> ';
                    echo '<input type="submit" id="sendAnswer" class="button" value="send" /> <br />';
                    echo '<span id="recoverErr"></span>';
                    $this->Session->write('recoverPass',$user[0]);
                }
            }
        }
        else{
            $this->redirect(array('controller'=>'message','action'=>'forbidden'));
        }
    }

そして、私はこれをjqueryファイルに書きました:

$('#send').click(function(){
    var recover = $('#recoverUsername').val();
    $('#recErr').css('color', 'red');
    if(recover == ''){
        $('#recoverUsername').focus();
        $('#recErr').html('Enter username');
        return false;
    }
    $.ajax({
        url: $('#base').html() + '/users/getinfo/'+recover,
        type: 'POST',
        success: function(data){
            if(data.match('username')){
                $('#recErr').html('Enter correct username.');
            }
            else if(data.match('Fail')){
                $('#recErr').html("This username doesn't exist");
            }
            else{
                $('#recErr').html('');
                $('#recoverWindow').html(data);
                $('#recoverWindow').dialog('open');                    

            }
        }
    });
});
$('#sendAnswer').click(function(){
                    var answer = $('#userAnswer').val();
                    $.ajax({
                        url: $('#base').html() + '/users/getanswer/'+answer,
                        type: 'POST',
                        success: function(data){                                
                            if(data.match('answer')){
                                $('#recoverErr').html('Enter answer');
                            }
                            else if(data.match('Fail')){
                                $('#recoverErr').html('answer is false.');
                            }
                            else if(data.match('Bad')){
                                $('#recoverErr').html('fail too send mail.');
                            }
                            else{
                                $('#recoverWindow').html('');
                                $('#recoverWindow').html('Email was sent, check your spam if it is not in your inbox.');
                            }
                        }
                    });});

しかし、クリックしてサーバーがユーザーの情報を見つけてrecoverWindowに入れると、クリック機能が機能せず、アクションへの回答が送信されません。助けてください、時間がありません

4

3 に答える 3

1

PHP 関数で回復フォームを作成するために Ajax を使用しました。$('#sendAnswer').click()そのため、ready 関数を入れることはできません。sendAnswer 要素が HTML に存在せず、php ファイルに作成する必要があるためです。したがって、ajax の実行後にこの要素のクリック関数を記述する必要があります。この説明により、JQuery コードは次のように変更されます。

$('#send').click(function(){
var recover = $('#recoverUsername').val();
$('#recErr').css('color', 'red');
if(recover == ''){
    $('#recoverUsername').focus();
    $('#recErr').html('Enter username');
    return false;
}
$.ajax({
    url: $('#base').html() + '/users/getinfo/'+recover,
    type: 'POST',
    success: function(data){
        if(data.match('username')){
            $('#recErr').html('Enter correct username.');
        }
        else if(data.match('Fail')){
            $('#recErr').html("This username doesn't exist");
        }
        else{
            $('#recErr').html('');
            $('#recoverWindow').html(data);
            $('#recoverWindow').dialog('open');
            $('#sendAnswer').click(function(){
                var answer = $('#userAnswer').val();
                $.ajax({
                    url: $('#base').html() + '/users/getanswer/'+answer,
                    type: 'POST',
                    success: function(data){                                
                        if(data.match('answer')){
                            $('#recoverErr').html('Enter answer');
                        }
                        else if(data.match('Fail')){
                            $('#recoverErr').html('answer is false.');
                        }
                        else if(data.match('Bad')){
                            $('#recoverErr').html('fail too send mail.');
                        }
                        else{
                            $('#recoverWindow').html('');
                            $('#recoverWindow').html('Email was sent, check your spam if it is not in your inbox.');
                        }
                    }
                });});


        }
    }
});});
于 2013-09-05T16:50:27.437 に答える
0

id="sendAnswer" を持つ要素が ajax 経由で読み込まれ、メイン ページでそのためのクリック イベントを記述した場合は、.on() または .live() メソッドを使用して実行する必要があります。

ただし、どちらの方法も異なる jQuery バージョンで使用されます。

以下のように書いてください

$(document).ready(function() {

      //if you are using jQuery version after 1.7 then use following
      $(document).on('click', '#sendAnswer', function(){
             //your logic
      });

      //if you are using jQuery version upto 1.7 then use following
      $('#sendAnswer').live('click', function(){
             //your logic
      });

});
于 2013-09-05T16:47:42.823 に答える
0

助けて、時間がない

それが、他の関連する回答を検索しなかった理由です..

とにかく、私のものを含むstackoverflowの他の多くの回答と同様に、ここでもう一度行きます..

を使用して、動的に追加された要素のクリックイベントを委任する必要がありますon

$('#recoverWindow').on('click','#sendAnswer',function(){
  ....

それ以外の

$('#sendAnswer').click(function(){
于 2013-09-05T16:48:33.963 に答える