2013-02-06 66 views
0

我有一個對應於數字的變量列表。我使用這些變量將數字寫入到我正在構建的Web應用程序的「屏幕」中。this.id對應於變量

var zero = 0; 
var one = 1; 
var two = 2; 
var three = 3; 
var four = 4; 
var five = 5; 
var six = 6; 
var seven = 7; 
var eight = 8; 
var nine = 9; 
var dec = "."; 
var neg = "-"; 

example Image

我曾經有過的onclick功能一長串的每個按鈕:

$('#a0').click(function(){ 
    writeInput(input, zero); 
}); 

$('#a1').click(function(){ 
    writeInput(input, one); 
}); 
$('#a2').click(function(){ 
    writeInput(input, two); 
}); 
... 

我想所有這些點擊的功能轉換爲這樣的事情:

$('.btnA').click(function(){ 
    var id = this.id; 
    writeInput(input, id); 
}); 

其中調用此函數:

function writeInput(field, str){ 
var text = $(field).val(function(i, v){ 
       return v + str; 
      }).text(function(i, t){ 
       return t + str 
      }).val(); 
convert(text, version); 

}

上的所有數字輸入按鈕的上面有這樣的HTML:

... 
<a id="seven" class="btnA"><div class="inputBtn mar" id="input7">7</div></a> 
<a id="eight" class="btnA"><div class="inputBtn mar" id="input8">8</div></a> 
<a id="nine" class="btnA"><div class="inputBtn" id="input9">9</div></a> 
... 

我的問題是:我可以從<a id="nine" class="btnA">獲得ID名稱和有它對應於var nine = 9;

我希望這是有道理的。如果不是,請問我會回答任何問題。謝謝!

+0

對於簡單數字文字你並不需要這些變量,對嗎? – Bergi

+0

您的'#a0','#a1' ...選擇器與您發佈的DOM片段不匹配。他們是什麼? – Bergi

+0

在我更改鏈接的ID之前,這些是舊的。我改變了id以符合變量名稱。 –

回答

4

使用對象的ID的鑰匙,你會得到數回:

var numbers = {one: 1, two: 2, three: 3, .....}; 

$('.btnA').click(function(){ 
    var id = numbers[this.id]; 
    writeInput(input, id); 
}); 
+0

他也可以利用這樣一個事實,即他的'nine'全局變量實際上是'window'對象的一個​​屬性:'var id = window [this.id];'然而,你的'numbers'對象是一個更好的編碼選擇和較少的整體代碼。 – Blazemonger

+0

感謝您的回答!非常好的代碼。還清理了我噁心的變量列表:) –

2

可以使用的數據類型的屬性和寫的東西:

<a data-number="7" class="btnA"><div class="inputBtn mar" id="input7">7</div></a> 

$('.btnA').click(function(){ 
    var number = $(this).data('number'); 
    writeInput(input, number); 
}); 
+1

編輯你的代碼使用['.data()'](http://api.jquery.com/data)intead of'.dataset',因爲[它在更多瀏覽器中工作] (https://developer.mozilla.org/en-US/docs/DOM/element.dataset)。 – Blazemonger

+0

感謝您的諮詢。 – WooCaSh

+0

@Blazemonger看來你的代碼現在不工作。請檢查:http://jsfiddle.net/c5d2t/2/ – WooCaSh

1

這應該做它:

$('.btnA').click(function() { 
    var t = $(this).text(), 
     n = parseInt(t, 10); 
    writeInput(input, isNaN(n) ? t : n); 
}); 

但是,你還可從id屬性(只是提取數0「a」),或者甚至更好地使用它們的數據屬性而不是閱讀按鈕文本。

+0

非常感謝! –