2013-03-01 118 views
1

我從使用JQuery blur()方法的'select'元素的選項拉取值,但由於某種原因它總是拉取selectedIndex = 0的值而不是我選擇的selectedIndex。JQuery沒有選擇SELECT

下面是 - >JSFiddle < - 出於某種原因,第一行工作正常(長度),但沒有其他行工作。

鍵入任何文本框的數字(除了第一個「長度」),然後選擇從毗鄰選擇框中的項目,然後從SELECT

點擊遠離你會看到代碼總是選擇每個SELECT元素中的option = 0的值。它也不能識別我的'數據隱藏'屬性作爲一個數字(見文本框中的HTML元素)

有人可以幫忙嗎?我一直堅持這一天。

**此外,出於某種原因,這隻適用於JQuery 1.7.2,而不是1.9版本(它不喜歡'選項:選擇'代碼,沒有人知道該代碼段如何符合最新發布?

$('select').blur(function() { 

//Get the value of the option chosen 
var unit = $(this + 'option:selected').val(); 

//If the selectedIndex is 0 then focus on the select and make the user chose a unit. 
    if ($(this).prop('selectedIndex') == 0) { 
     $(this).focus(); 
    return; 
} else { 


//Remove the 'd' in front of the 'select' element ID and you will have the ID of the textbox 
     var txt = "#" + $(this).attr("id").substr(1); 

//Get the numerical value of the textbox 
     var mval = parseFloat($(txt).val()); 

      if ($(txt).attr('data-hid') == "OFF") { 
       var hid = mval/unit; 
       $(txt).attr('data-hid', hid); 
       alert("hid = " + hid + "\nmval = " + mval + "\nunit = " + unit); 
      } 
      else 
      { 
       var hid = $(txt).attr('data-hid'); 
       var newtxt = hid * unit; 
       $(txt).val(newtxt); 
      } 
} 
main(); 
}); 

回答

2

你爲什麼不只是使用$(this).val(),讓你選擇項目的設定值的?有沒有必要專門首先拿到選項元素。

http://api.jquery.com/val/

的文檔甚至s ays等等。

+0

大聲笑...一切正常!我想我試圖讓它太複雜了。謝謝 – bagofmilk 2013-03-01 14:56:27

1

此行是錯誤的:

//Get the value of the option chosen 
var unit = $(this + 'option:selected').val(); 

應該是:

var unit = $(':selected', this).val(); 

要理解爲什麼(除了看jQuery的文檔),儘量只在您的blur功能這一行:

console.log(this + 'option:selected'); //outputs something like [object HTMLSelectElement]option:selected 

可能做些什麼lik E:

console.log('#' + $(this).attr('id') + ' option:selected'); //outputs something like #mySelectBox option:selected 

,但現在我們纔剛剛有點可笑:d ...但也許它可以幫助你瞭解jQuery選擇是如何工作的,至少= 0]

Torsten's答案真的是正確的這樣如果你想獲得一個選擇,那就是,在該選項被選中該值的價值要做到這一點

+0

實際上它應該是'var unit = $(':selected',this).val();'因爲'var unit = $(':selected',unit).val();'不起作用。 – j08691 2013-03-01 14:57:54

+0

@ j08691:對不起,打錯了。今天早上還沒有足夠的咖啡。 – BLSully 2013-03-01 14:59:04

1

,做正確的做法是:

$(this).val(); // Inside the .blur "this" points to your select 

然後在代替檢查選定的索引是否爲0,您可以檢查值是否爲空,如果是空的返回,否則該人從您的選擇中選擇了有效值。

此外,在您的小提琴html第一個選項是「選定」,你不必把該關鍵字,使第一個選項的行爲作爲默認,如果沒有被選中,那麼第一個選擇。

此外,你確定你想要這個事件觸發模糊? wouldnt.change更適合你的目的。從你的描述中,「工作流程」是在輸入中鍵入一個數字,然後在選擇上選擇一個單位。只要用戶選擇了一個值,就會更改觸發器,只有在選擇區域失去焦點時纔會觸發模糊。

+0

我曾經想過.change,但是一旦用戶鍵入一個數字並選擇一個單位 - 那麼這個數字就被鎖定了。如果他們想看看他們的價值轉化爲什麼(在另一個單位),他們可以選擇另一個單位。如果我做.change - 和用戶意外選擇一個單位 - 然後他們將不得不重置整個表格,並重新開始。模糊方法並不理想,但我認爲它在這種情況下效果最好。 – bagofmilk 2013-03-01 15:04:45

+0

我看到,只要一個單位被選中,它就會獲得「submited」。只有這樣,我可以認爲這可能比.blur更好,因爲這種情況是用選擇按鈕 – cernunnos 2013-03-01 15:09:19

+0

將「提交」從選擇中分離出來。儘管我會在.change上提出您的建議。當用戶想要查看他們的號碼轉換爲什麼時 - 我會使用.change,但是當他們第一次輸入他們的號碼時,我會保留.blur – bagofmilk 2013-03-01 15:25:15