2013-08-01 135 views
0

我想替換DIV動態替換一個div

<div class="models"> 
    <select disabled="disable"> 
     <option>Model Name</option> 
    </select> 
</div> 

我努力的目標div和加載選擇框這樣

jQuery('.models select').change(function() { 
     var model = jQuery('.models option:selected').text(); 

內的選擇框裏面選擇框我沒有收到關於變化的任何行動,雖然

http://jsfiddle.net/HNgKt/

+2

你可以elobrate更多... –

+0

有一個選項是沒有辦法的選擇,以「變」 –

+0

在一個側面說明,你應該使用[ 'optgroup'](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup)s爲「品牌」和「型號名稱」 –

回答

-1

嘗試FOLL因爲:

/* using delegate version of .on */ 
jQuery(document).on('change', '.brands', function() { 
    var brand = jQuery('.brands option:selected').text(); 
    brand = cleanString(brand); 
    jQuery('.models').load('/pf-models #' + brand); 
}); 

jQuery(document).on('change', '.models select', function() { 
    var model = jQuery('.models option:selected').text(); 
    model = cleanString(model); 
    jQuery('#show-models').load('/pf-urls #' + model); 
}); 

對於處理「動態」的元素,你想用delegate指定動作。這基本上保留了一個方法分配給符合描述的所有元素。

參見:

  1. http://api.jquery.com/delegate/
  2. http://api.jquery.com/on/#direct-and-delegated-events
+2

綁定到文檔是一個可怕的想法...它應該被綁定到最近的靜態父... –

+1

@SerjSagan和爲什麼綁定到doc這樣一個「可怕」的想法。此外,我不知道最接近的「靜態」元素。是啊,「我」往往綁定到已知的靜態,但我也設計了很多「小部件」,並知道「最接近的靜態元素」幾乎不可能,因此我也綁定到文檔很多... 0問題...永遠......在任何平臺上......在任何瀏覽器上。那麼,爲什麼它是「可怕的」? – SpYk3HH

+1

@SerjSagan @SerjSagan沒有充分的證據證明你知道你在說什麼,而不是經常使用這個答案的人,並且多年以來,你的迴應顯然是粗魯無禮,並且令那些不知道已有差異的人產生恐懼。請支持您的聲明或將其刪除。 – SpYk3HH

0

簡單的變化:綁定你的改變事件處理程序div容器(這應該是目前該執行時),並獲取文本值由此:

jQuery('.models').on('change','select',function() { 
    var model = jQuery(':selected',this).text(); 
    var modelValue = jQuery(':selected',this).val(); 
}); 

注意:你的f iddle和標記有它diabled,當然就需要先啓用,是這樣的:

jQuery('.models>select').prop('disabled',false); 

編輯:用你的小提琴,我搗碎左右,註釋掉你的負擔 - 因爲它沒有在那裏工作和cleanstring,不存在,並且這個工作原理:

jQuery('.brands').change(function() { 
    alert('here'); 
    var brand = jQuery('.brands option:selected').text(); 
    // brand = cleanString(brand); 
    //jQuery('.models').load('/pf-models #' + brand); 
    jQuery('.models>select').append('<option >She is a classic</option>').prop('disabled', false); 
}); 

alert(jQuery('.models>select').prop('disabled')); 

jQuery('.models').on('change', 'select', function() { 
    var model = jQuery(":selected", this).text(); 
    alert(model); 
    model = cleanString(model); 
    jQuery('#show-models').load('/pf-urls #' + model); 
}); 

更新撥弄:http://jsfiddle.net/HNgKt/6/

EDIT進一步的詳細示例中,仍然是基於有效的標記假設從負載回來上我已經取代了第一部分一個html替換罪CE我們還沒有接觸到的部分:

jQuery('.brands').change(function() { 
    var brand = jQuery('.brands option:selected').text(); 
    $('.models').html('<select class="models"><option >' + brand + ' She is a classic</option><option>clunker</option></select>'); 
}); 
jQuery('.models').on('change', 'select', function() { 
    var model = jQuery(":selected", this).text(); 
    alert('model:' + model); 
}); 

小提琴爲:http://jsfiddle.net/HNgKt/7/

警報的模型,如果你選擇一個品牌,然後一個模型。

+0

有人顯然不喜歡我認爲'jQuery(' .models')。load('/ pf-models#'+ brand)'實際上會返回select的有效HTML標記。所以,我又增加了一個例子。 –

0

嘗試以下步驟,

  1. 對品牌變化列表中進行Ajax調用,並確保在結果您收到新的列表選項,也可以動態地在jQuery的準備選項列表也。
  2. 並且調用成功後,用收到的數據重新填充新列表。


jQuery('.brands').change(function() { 
    var brand = jQuery('.brands option:selected').text(); 
    brand = JSON.stringify(cleanString(brand)); 
     $.ajax({ 
      type: "GET",  //GET or POST or PUT or DELETE verb 
      url: ajaxUrl,  // Location of the service 
      data: brand ,  //Data sent to server 
      contentType: "",  // content type sent to server 
      dataType: "json", //Expected data format from server 
      processdata: true, //True or False 
      success: function (data) {//On Successful service call 
      var $newList = $(".models select'").empty(); 
      $newList.append(data); 
      }, 
      error: function(){} // When Service call fails 
     }); 
});