2010-10-07 56 views
4

我有以下的下拉列表框:調用jQuery函數

 <select name="DDLConditional1" size="1"> 
      <option selected="selected">is equal to</option> 
      <option>begins with</option> 
      <option onclick="ShowBetween();">is between</option> 
      <option>is not equal to</option> 
      <option>is greater than</option> 
      <option>is less than</option> 
     </select> 

我想說明()的文本框和標籤,根據使用者選擇「介於」下拉列表的選項。 我有這些下拉的倍數,他們都必須做同樣的事情。換句話說,我有 DDLConditional1 2 3 4 ...無限。我已經能夠使按鈕工作追加新的條件。

+0

你在問什麼?如何使文本框和標籤出現?如何動態添加新的下拉菜單?如何使每個下拉菜單發生事件? – Adam 2010-10-07 20:26:57

+0

你的問題是什麼?您是否遇到了實施此問題的具體問題? – 2010-10-07 20:27:48

+0

@Deano - 如果您對所給答案的所有反對票都感到困惑,請注意,它們都可能來自一個更加困惑的用戶。 – user113716 2010-10-07 20:42:14

回答

2

我擺脫了內聯處理程序的分配,並使用jQuery來管理你的處理程序。

聽起來好像<select>元素被動態添加到DOM,所以這使用jQuery's .live() method來處理這些動態元素。

例子:http://jsfiddle.net/GPMmJ/

$(function() { 
    $('select[name^=DDLConditional]').live('change', function() { 
     if($(this).val() === 'is between') { 
      alert('is between was selected'); 
     } 
    }); 
}); 

任何時間<select>是有starts withDDLConditional被添加到該頁面的名稱,change處理程序將自動工作。它獲得使用jQuery's .val() method選擇的值,並檢查它是否爲in between

+0

你想'點擊',而不是'改變'。這在1.3.2和ie中不起作用。 – 2010-10-07 20:31:38

+0

@Stefan - 所以''jQuery 1.3.2'在這裏被使用?這就是爲什麼你投了我票?因爲我真的沒有看到問題的任何地方。 – user113716 2010-10-07 20:34:57

+0

@斯特凡,你是個白癡。它在IE6/7/8中工作,OP從未提及過jQuery 1.3.2。 http://jsfiddle.net/JhBdm/。現在給我回我的投票:) – Marko 2010-10-07 20:41:50

0

你不想要onclick - 你想使用<select>onchange,在那裏你會測試它的當前值,看看它是你想要的。

+0

在1.3.2和IE中不起作用。 – 2010-10-07 20:30:16

+2

我不記得有關1.3.2的任何內容,我也不記得IE抱怨'onchange'。下一次你不同意一組答案,發佈一個更好的解決方案,而不是無益的。 – mway 2010-10-07 20:39:35

+0

謝謝大家,您的迅速回復。 「.live」解決方案適用於我和IE8。我的下一個挑戰是根據選擇的「之間」顯示兩個動態創建和列舉的控件(一個標籤和一個文本框)。 – DeanoReno 2010-10-08 15:34:40

1

爲什麼不使用jQuery整個與onChange事件,而不是onClick:在頁面加載後

jQuery(document).ready(function() {  

    jQuery("select[name^=DDLConditional]").live("change", function() { 
     if(jQuery("option:selected", this).text() === "is between") { 
     //display the textbox and label 
     } 
    }); 
}); 

此代碼運行。它會查找名稱以DDLConditional開頭的所有select元素。然後它使用live(以便即使將來可以動態添加的元素也被考慮)將處理程序綁定到change事件。

+0

在1.3.2和IE中不起作用。 – 2010-10-07 20:31:06

+0

@Stefan你在說什麼? jQuery 1.3.2和IE甚至會在這裏出現?這就是爲什麼你低估了?如果沒有正當理由,請不要低估。 – 2010-10-07 20:35:55

+0

顯然@Stefan認爲我們不允許給出不兼容的答案,回溯到......什麼......'jQuery version 1'? – user113716 2010-10-07 20:37:35

1

是的肯定的事情,只需將<select>包裝在一個div中,你可以很容易地使用jQuery附加一個文本框。喜歡的東西:

<div class="conditional> 
    <select name="DDLConditional1" size="1"> 
     ... 
    </select> 
</div> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     // store our select as a jQuery object 
     var $select = $(".conditional select"); 
     $select.change(function() { 
      // get our parent (the div) 
      var $wrapper = $(this).closest(".conditional"); 

      // if the selected option's text is "in between" 
      if($("option:selected", this).text() == "is between") { 
       // append a textbox 
       var $newTextbox = $("<input type='text' />"); 
       $newTextbox.css('color', 'red'); //perhaps set some CSS properties? 
       $wrapper.append($newTextbox); 
      } 
     }); 
    }); 
</script> 

下面是一個example,在IE 7/8,火狐,Chrome和Safari的作品。