2017-03-27 28 views
1

我有以下的Javascript功能如何通過HTML屬性值作爲參數

function CallOfferRenderAction(productCode, providerCode) 
{ 

} 

我想要的onclick發送屬性的值,但我得到的錯誤:

Uncaught ReferenceError: offercode is not defined at HTMLInputElement.onclick

這裏是如何我發送屬性的值。

<input type="button" value="View" class="viewbtn" onclick="CallOfferRenderAction(this.attr(offercode), this.attr(providercode))" offercode="ATT-COMP-DTV-PRM-ALL-INCL_SEPARATOR_ATT-COMP-HSIA-PLS-A" providercode="ATTv6"> 

我在做什麼錯?

+0

提供一些更多的HTML內容,你在哪裏設置offercode和providercode您在HTML中使用。 – Shan

+0

'offercode'變量不是正在執行的JS的inscope。如果你打算把它作爲一個字符串包含,那麼你會看到attr()不是函數,因爲這是一個jQuery方法,而this是一個本地元素 –

+0

我認爲你只需要將offercode和providercode單引號。 –

回答

3

offercode變量不是執行JS的inscope。如果你的意思是把它作爲一個字符串來引用您的button元素的屬性,那麼你會看到一個不同的錯誤:

attr() is not a function

這是因爲attr()是一個jQuery方法,並this指天然元素。

爲了解決這個問題,你可以提供this到jQuery對象:

function CallOfferRenderAction(productCode, providerCode) { 
 
    console.log(productCode); 
 
    console.log(providerCode); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="button" value="View" class="viewbtn" onclick="CallOfferRenderAction($(this).attr('offercode'), $(this).attr('providercode'))" offercode="ATT-COMP-DTV-PRM-ALL-INCL_SEPARATOR_ATT-COMP-HSIA-PLS-A" providercode="ATTv6">

但是一個更好的解決方案完全是使用不引人注目的JS附加的事件。如果你喜歡,你可以使用jQuery來做到這一點。

另請注意,您添加的屬性完全是非標準的,可能會導致無法預料的問題。將元數據添加到元素時,最好使用data屬性,因爲這是它們的設計目的。試試這個:

$(function() { 
 
    $('.viewbtn').click(function() { 
 
    var $button = $(this); 
 
    console.log($(this).data('offercode')); 
 
    console.log($(this).data('providercode')); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="button" value="View" class="viewbtn" data-offercode="ATT-COMP-DTV-PRM-ALL-INCL_SEPARATOR_ATT-COMP-HSIA-PLS-A" data-providercode="ATTv6">

+0

很好的解釋。將使用數據屬性! +1 –

+0

沒問題,很樂意幫忙。 –