2016-07-22 30 views
0

我嘗試過使用PHP打印的HTML元素進行驗證,但它不起作用,但當我將相同的HTML放在沒有PHP的情況下,它確實有效。爲什麼jQuery不通過PHP在印刷元素上工作?

下面是在其中的實際數據將通過AJAX被打印的HTML:

<div class="row" id="live_data"> 
    // here will all radio buttons and images echo via ajax 
</div> 

這裏是AJAX:

function fetch_all() { 
     var form_name = 'package_form2'; 
     $.post('ajax/ajax_form_get_all_packages.php',{form_name:form_name}, function(result) { 
      console.log(result); 
      $('#live_data').html(result); 
     });  
} fetch_all(); 

這裏是它獲取通過Ajax呼應的實際數據:

$output .= ' 
     <div class="col-md-4"> 
      <label for="'.$id.'"> 
       <img src="uploads/'.$img.'" class="img-responsive"> 
      </label> 
      <div> 
       <div class="radio text-center"> 
       <input type="radio" id="'.$id.'" value="'.$code.'" name="optradio" class="optradio"> 
       </div> 
      </div> 
     </div> 
     '; 

以下是FormValidation的代碼:

$(document).ready(function() { 
    $('#menu1_info').formValidation({ 
     message: 'This value is not valid', 
     icon: { 
      invalid: 'glyphicon glyphicon-remove', 
      validating: 'glyphicon glyphicon-refresh' 
     }, 
     fields: { 

      optradio: { 
       validators: { 
        notEmpty: { 
         message: 'Please choose one of the Package' 
        } 
       } 
      } 
     } 
    }) 
    .on('success.form.fv', function(e) { 
      // Prevent form submission 
      e.preventDefault(); 

      // Get the form instance 
      var $form = $(e.target); 

      // Get the BootstrapValidator instance 
      var fv = $form.data('formValidator'); 


     $form.bootstrapValidator('disableSubmitButtons', false); 

     }); 
}); 

回答

0

您的標記中沒有類optradio的元素。取而代之的是一個具有屬性name等於optradio

$(document).on('change', '[name="optradio"]', function() { 
    alert("Radio button clicked"); 
}); 

UPDATE

如果我理解正確,#menu1_info元素來自Ajax響應

$(document).ready(function() { 
    $('#menu1_info').formValidation({ 

在這裏,您嘗試選擇準備好文檔中的元素,但此元素是不存在到DOM,因爲它異步追加(文檔準備就緒後)。

所以,你必須在目標元素出現在DOM之後(在ajax回調函數中)初始化你的插件。

// The $('#menu1_info') element is not present now 
$.ajax({ 
    url: '...', 
    ..., 
    success: function(data) { 
     // Append data from ajax call 
     $('#target').append(data); 
     // Now, $('#menu1_info') element is present 
     $('#menu1_info').formValidation({ ... }); 
    } 
}); 
+0

你好感謝你這麼多,你的解決方案是正確的,我編輯我的問題,你能告訴我什麼原因BootstrapValidator不起作用的元素,由PHP打印 –

+0

問題是,你試圖選擇一個不存在的元素(沒有類'optradio'的元素存在)。 – kapantzak

+0

BootstrapValidator通過名稱獲取元素,所以它應該只是通過名稱元素工作,但它不在名稱上工作:( –

0

響應'.optradio'中沒有這樣的元素。

不如改成這樣:

$('#live_data').on('change', ':radio', function() { 
    alert("Radio button clicked"); 
}); 

你也可以委託給最接近的靜態父而你的情況是#live_data

+0

嗨,非常感謝你,這個解決方案完美地工作,我編輯了我的問題,你能否也請告訴我如何解決它,它來自同一個html –