2013-05-30 120 views
-1

我想,当选择更改为通过AJAX获取数据,这就是为什么我用.trigger()使用触发器来获取值

但是,它似乎并不奏效。我可以从数据库中顺利地获取数据,然后通过AJAX将其传递到项目类型。

这。

HTML

<!doctype> 

<html> 
    <head> 
     <title>Coupon Protoype</title> 
     <link rel="stylesheet" type="text/css" href="css/coupon.css"> 
    </head> 
    <body> 
     <div class="body-wrap"> 

      <section class="wrap-form"> 
       <label for="item-types">Item Types</label><select id="item-types"></select> 
       <label for="item-list">Items</label><select id="item-list"></select> 

       <input type="text" placeholder="Check Code" id="input-code"/> 
       <input type="button" id="button-check" value="Check"/> 
      </section> 

      <section class="output-wrap"> 
       <label>Coupon Code:</label> <label id="coupon-code"></label> 

      </section> 

     </div> 
    </body> 
    <script type="text/javascript" src="javascript/jquery-1.10.0.min.js"></script> 
    <script type="text/javascript" src="javascript/coupon.js"></script> 
</html> 

的Javascript

$(document).ready(function(){ 


    function get_items_type(){ 

     $.ajax({ 
       type:'POST', 
       url:'coupon-functions.php', 
       dataType:'json', 
       data:{'switch-num':'1'}, 
      success:function(data){ 

       if(data.error){ 

        alert(data.error); 
       } 
        var html = ''; 
        $.each(data, function(i, item) {  
          html += "<option value="+data[i].item_type_id+">"+data[i].item_type+"</option>"; 
        }); 

        $('#item-types').append(html); 
      } 
     }) 
    } 

/这条线是什么即时消息说$( “#项目类型”)。在( “变”,函数() {

 var item_type_id = $(this).val(); 

     $.ajax({ 
       type:'POST', 
       url:'coupon-functions.php', 
       dataType:'json', 
       data:{'switch-num':'2','item_type_id':item_type_id}, 
      success:function(data){ 

       if(data.error){ 

        alert(data.error); 
       } 
        var items = ''; 

        $('#item-list').html(""); 

        $.each(data, function(i, item) {  
          items += "<option value="+data[i].item_id+">"+data[i].item_name+"</option>"; 
        }); 

        $('#item-list').append(items); 
      } 
     }) 


    }); 

    $("#item-types").trigger("change"); 


    get_items_type(); 


}); 

PHP

<?php 
    include_once('db_connect.php'); 

    $switch_number = $_POST["switch-num"]; 

    switch ($switch_number) { 
     case '1': 
      get_item_list(); 
      break; 

     case '2': 
      get_item(); 
      break; 
    } 

    function get_item_list(){ 

     $get_items = "SELECT * FROM item_type_info"; 

     $query_get_items = mysql_query($get_items); 

     $data = array(); 

     if(!$query_get_items){ 


      $data['error'] = die(mysql_error()); 
     } 

     while($row = mysql_fetch_array($query_get_items)){ 

      $data[] = array('item_type_id' => $row['item_type_id'], 
          'item_type' => $row['item_type']); 
     } 

     echo json_encode($data); 

    } 

    function get_item(){ 
     $item_type_id = $_POST['item_type_id']; 

     $get_items = "SELECT * FROM item_info a 
           LEFT JOIN item_type_info b 
           ON(a.item_type_id = b.item_type_id) 
           WHERE a.item_type_id = '$item_type_id' "; 

     $query_get_item = mysql_query($get_items); 

     $item = array(); 

     if(!$query_get_item){ 

      $item['error']=die(mysql_error()); 
     } 

     while($row = mysql_fetch_array($query_get_item)){ 

      $item[] = array('item_id' => $row['item_id'], 
          'item_name' => $row['item_name']); 
     } 

     echo json_encode($item); 

    } 


?> 

我用.on()作为.live()的替代品。我只需要使它在加载页面时工作,触发器将在选择列表中进行更改。

+0

我相信它应该是$(“#item-types”)。change(f结()); – Jim

回答

0

我相信你的trigger()功能的理解是手头的问题。采用trigger()用于手动触发一个事件,你似乎想拥有,当你选择框改变你的函数被解雇。

当发生相应的事件时,会触发任何附加.on()或其快捷方法 的事件处理程序。但是,可以使用.trigger()方法手动触发 。

更换:

$("#item-types").trigger("change"); 


get_items_type(); 

有:

$("#item-types").on("change", function(){ 
    get_items_type(); 
}); 
到.trigger()的调用 在他们是,如果事件 是由用户触发自然相同的顺序执行处理程序

Working Demo:http://jsfiddle.net/pQDjy/

+0

不,它不工作..我试图提醒$(“#item-types”)的值。其空我不知道为什么触发不起作用 – Aoi

+0

我不知道你在做什么,但上述修改将触发对选择框的变化'get_items_type()'函数。看到一个工作示例小提琴链接。 – RobB

+0

触发所谓触发#项目类型的变化,然后得到的值,然后将它传递给阿贾克斯 – Aoi