2017-10-27 4 views
0

나는이에 대한 배송 옵션을 검색하는 자바 스크립트 코드에 의해 다음입니다 counteries에게는 PHP에서 선택 제어, 트리거 문제에서 onchange를의 이벤트는

<section class="shipping-calculator-form-shortcode" > 
    <p class="form-row form-row-wide" id="calc_shipping_country_field"> 
     <label >Shipping options to</label> 
     <select onchange="myFunctionShipping(this)" name="calc_shipping_country" id="calc_shipping_country" class="ss-woo-shipping-calculator" rel="ss-woo-shipping-calculator"> 
      <option value="1"><?php _e('Select a country&hellip;', 'woocommerce'); ?></option> 
      <?php 
       foreach (WC()->countries->get_shipping_countries() as $key => $value) 
        echo '<option value="' . esc_attr($key) . '"' . selected(WC()->customer->get_shipping_country(), esc_attr($key), false) . '>' . esc_html($value) . '</option>'; 
      ?> 
     </select> 
    </p> 
    <span id="ss-woo-shipping-calculator-loading" style="display:none"><img src='<?php echo plugins_url('/default.gif', __FILE__) ?>' /></span> 
    </p> 

    <?php wp_nonce_field('woocommerce-cart'); ?> 
      <div id="ss-woo-shipping-result"> 

      </div> 
</section> 

을 보여 선택하는 사용이

<script type="text/javascript"> 
var $s = jQuery.noConflict(); 
function myFunctionShipping(item) { 
$s(document).ready(function($) { 
$("select").change(function(){ 
    var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>"; 
    var country = item.value; 
    $("#ss-woo-shipping-calculator-loading").show(); 
    var data = {'action': 'ss_woo_shipping_calculator','country': country}; 
    $.post("<?php echo get_home_url(); ?>", data, function(response) { 
     $("#ss-woo-shipping-calculator-loading").hide(); 
     response = JSON.parse(response); 
     if(response.result == 1){ 
      $("#ss-woo-shipping-result").html(response.message); 


     }else{ 
      $("#ss-woo-shipping-result").html(""); 
     } 

     return false; 
    }); 
return false;});  
}); 
} 

문제 : - 다른 선택 컨트롤이 변경된 경우 트리거합니다. 또한 선택을 두 번 변경 한 후에 만 ​​트리거됩니다 (페이지로드 후 ng)

답변

0

"그 동작은 선택 $ ("select "). change()에 적용됩니다. 제한된 작업으로 변경하여

$("#calc_shipping_country").change(function() 

과 같은 선택 ID를 사용하거나 선택한 클래스 이름을 사용하도록 선택할 수 있습니다.

EDIT.

실수로, 나는 그 행동이 기능에 의해 불려지는 것이며 행동을 선택하지 않는다는 것을 이해하지 못했습니다. $ ("select")를 완전히 제거하려고합니다. (function() 포장을 바꾸고 다음과 같이 만듭니다.

<script type="text/javascript"> 
var $s = jQuery.noConflict(); 
function myFunctionShipping(item) { 
$s(document).ready(function($) { 
    var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>"; 
    var country = item.value; 
    $("#ss-woo-shipping-calculator-loading").show(); 
    var data = {'action': 'ss_woo_shipping_calculator','country': country}; 
    $.post("<?php echo get_home_url(); ?>", data, function(response) { 
     $("#ss-woo-shipping-calculator-loading").hide(); 
     response = JSON.parse(response); 
     if(response.result == 1){ 
      $("#ss-woo-shipping-result").html(response.message); 


     }else{ 
      $("#ss-woo-shipping-result").html(""); 
     } 

     return false; 
    }); 
return false;  
}); 
} 
</script> 
+0

재생에 감사드립니다. 그러나 사용하는 select의 id로 변경하면 가능합니다. 전혀 트리거하지 마십시오! – user3403964

+0

도움을 주셔서 대단히 감사합니다. – user3403964