2013-07-16 12 views
5

初めて「Add New」を選択して新しいオプションを追加すると、次のように動作します。 2回目(クラスによって区別される別の要素の場合)、選択された要素と最初の要素に新しいオプションが追加されます。両方の要素は新たに追加されます。なぜjQuery ajaxはここに2回投稿しますか?

<script type="text/javascript"> 

     $('#upload_form option[value="addnew"]').click(function(){ 

      // Show modal window 
      $('#add-new').modal('show'); 

      // Get the class 

      var Classofentry = $(this).attr("class");   

      $('#add-new-submit').on('click', function(){     

       // Get new option from text field 
       var value = $('#add-new-text').val(); 
       console.log(value); 

       $.ajax({ 
        type: "POST", 
        url: "<?php echo site_url(); ?>main/change_options", 
        data: {new_option: value, new_option_class: Classofentry}, 
        dataType: "html", 
        error: errorHandler, 
        success: success 
        }); 

       function success(data) 
       { 

        $('#'+Classofentry).append("<option value='" + data + "'selected=\"selected\">" + data + "</option>"); 
        //alert(data); 

        //alert('Success!'); 

       } 

       function errorHandler() 
       { 
        alert('Error with AJAX!'); 
       } 

       $('#add-new').modal('toggle'); 

      }); 
     }); 

    </script> 

奇妙なことは、アヤックスを2回繰り返しているようです。私はそれがすべての "addnew"の値を見つけていると思います(2つはこれまでのところあります、それ以上はあります)。指定されたクラスで要素を処理するにはどうすればよいですか?これが理にかなってほしい。

+1

あなたは#upload_formのオプションをクリックするたびに、[値=「AddNewメソッド」]は、あなたが#に新しいクリックハンドラを追加しますadd-new-submit。最初のボタンを5回クリックすると、2番目のボタンをクリックすると5回トリガされます。 – Robert

+0

@ロバート:モーダルの解雇時に元に戻すにはどうすればよいですか?私。 #upload_formオプション[value = "addnew"]をクリックしてモーダルをクリックして解除すると、 – MysticalTautologist

答えて

4

お返事ありがとうございます!私はクリックをネストしたままにしておくが、2番目のものはバインドしないようにする方法を見つけた。私は、提案された解決策(すべての機能を無効にする)を働かせることができませんでした。 2番目のクリックが入れ子になっていないときに動作させる方法はないようです。なぜ私は分からない。また、ajaxを呼び出す関数の中にsuccessとerrorHandler関数を持たせることも必要です。ここでは、コード(同じ質問以上が、第2ネストされたクリックでアンバインド文を使用して)です:

<script type="text/javascript"> 

     var Classofentry = ''; 

     $('#upload_form option[value="addnew"]').click(function(){ 

      // Show modal window 
      $('#add-new').modal('show'); 

      // Get the class 
      var Classofentry = $(this).attr("class"); 
      console.log(Classofentry);Thanks    

     $('#add-new-submit').on('click', function(){     

      // Get new option from text field 
      var value = $('#add-new-text').val(); 
      console.log(value); 

      $.ajax({ 
       type: "POST", 
       url: "<?php echo site_url(); ?>main/change_options", 
       data: {new_option: value, new_option_class: Classofentry}, 
       dataType: "html", 
       error: errorHandler, 
       success: success 
       }); 

      $('#add-new-submit').unbind('click') // <-------------- The answer!!!!! 
      $('#add-new').modal('toggle'); 


      function success(data) 
      { 

       //$('#animal_species').append("<option value='" + data + "'selected=\"selected\">" + data + "</option>"); 
       $('#'+Classofentry).append("<option value='" + data + "'selected=\"selected\">" + data + "</option>"); 
       //alert(data); 

       //alert('Success!'); 

      } 

      function errorHandler() 
      { 
       alert('Error with AJAX!'); 
      } 
     }); 
     }); 

    </script> 
+1

私の人生を救う!ありがとう! – Rubyrider

2

クリックイベントをネストしないでください。

ここでの問題あなたは$('#add-new-submit')$('#upload_form option[value="addnew"]')上のクリックイベントがどのように見えるはずです

あなたのスクリプトをトリガされますたびにクリックイベントを結合することで、以下の

var Classofentry; 
$('#upload_form option[value="addnew"]').click(function() { 

    // Show modal window 
    $('#add-new').modal('show'); 
    // Get the class 
    Classofentry = $(this).attr("class"); 
}); 

$('#add-new-submit').on('click', function() { 

    // Get new option from text field 
    var value = $('#add-new-text').val(); 
    console.log(value); 

    $.ajax({ 
     type: "POST", 
     url: "<?php echo site_url(); ?>main/change_options", 
     data: { 
      new_option: value, 
      new_option_class: Classofentry 
     }, 
     dataType: "html", 
     error: errorHandler, 
     success: success 
    }); 
    $('#add-new').modal('toggle'); 

}); 

function success(data) { 
    $('#' + Classofentry) 
     .append("<option value='" 
       + data + "'selected=\"selected\">" + data + "</option>"); 
    //alert(data); 

    //alert('Success!'); 
} 

function errorHandler() { 
    alert('Error with AJAX!'); 
} 
+0

あなたの答えをありがとう。私はそれを試して、今私のテキストを入力し、追加ボタンをクリックした後、私のモーダルウィンドウは何もしません。 2つのクリックイベントを入れ子にすることなく、テキスト入力を受け入れるためにモーダルウィンドウをトリガーするにはどうすればよいですか? – MysticalTautologist

+0

コンソールにエラーがないか確認してください。 –

+0

[追加]ボタンは効果がないため、コンソールはクリーンです。 – MysticalTautologist

0

正しいコード:

var Classofentry = ''; 
$('#upload_form option[value="addnew"]').click(function(){ 
// Show modal window 
$('#add-new').modal('show'); 
    Classofentry = $(this).attr("class"); // Get the class 
});   



$('#add-new-submit').on('click', function(){     

// Get new option from text field 
var value = $('#add-new-text').val(); 
console.log(value); 

$.ajax({ 
    type: "POST", 
    url: "<?php echo site_url(); ?>main/change_options", 
    data: {new_option: value, new_option_class: Classofentry}, 
    dataType: "html", 
    error: errorHandler, 
    success: success 
}); 

function success(data){ 

    $('#'+Classofentry).append("<option value='" + data + "'selected=\"selected\">" + data + "</option>"); 
    //alert(data); 

    //alert('Success!'); 

} 

function errorHandler(){ 
    alert('Error with AJAX!'); 
} 

$('#add-new').modal('toggle'); 

}); 
関連する問題