3

メニューから値が選択されたときにこの行を更新する ajax onclick がいくつかあります。

<li id="li_273" data-pricefield="special" data-pricevalue="0" >

その意図は、その値 (data-pricevalue) を取得し、別の入力ボックスから入力された金額を掛けることです。これを実現するための私の関数は次のとおりです。

$('#main_body').delegate('#element_240','keyup', function(e){

var temp = $(this).attr("id").split('_');
var element_id = temp[1];

var price = $('#li_273').data("pricevalue"); 

var ordered = $(this).val();

var price_value = price * ordered;

price_value = parseFloat(price_value);
if(isNaN(price_value)){
    price_value = 0;
}

$("#li_273").data("pricevalue",price_value);
calculate_total_payment();  

});

次のエラーが発生することを除いて: Uncaught TypeError: Cannot call method 'data' of null

getElementById から価格値を取得しようとする試みが正しくないようです。助言がありますか?

更新:上記のコードは、あなたの提案から編集されており、すべてに感謝します。現在は問題なく動作しているようです。

4

7 に答える 7

6

この部分は間違っています:

var price = document.getElementById('#li_273').data("pricevalue").val();

代わりに、ここではずっとjQueryを使用する必要があります。

var price = $('#li_273').data("pricevalue"); 

ところで、すでに文字列を返している.val()ので、使用しないでください。やなどの入力要素にのみ使用されます。.data().val()<input><select>

アップデート

また、残りのコードは次のようになります。

var price_value = parseFloat(price);
if(isNaN(price_value)){
    price_value = 0;
}
于 2012-12-22T02:26:51.193 に答える
3

getElementById は jQuery オブジェクトを返さず、通常の DOM オブジェクトのみを返します。

jQuery 呼び出しで任意の DOM オブジェクトをラップして、jQuery オブジェクトとして取得できます。

 $(document.getElementById("li_273")).data("pricevalue").val();

または、jQuery を使用することをお勧めします

 $("#li_273").data("pricevalue").val()
于 2012-12-22T02:24:02.423 に答える
2

あなたの呼び出しはdocument.getElementById('li_273')通常の方法である必要があり、jQuery のようにハッシュは必要ありません。

EDIT @kennypuが指摘しているように、jQuery以外のオブジェクトでjQueryを使用しています。@Craigには最良の解決策があります。

于 2012-12-22T02:21:59.253 に答える
1

jQueryを使用しているのに、なぜ代わりにdocument.getElementByIdを使用しているの$(...)ですか?そのはず:

$('#li_273').data("pricevalue")

このdata()メソッドは、DOM要素ではなく、jQueryオブジェクトでのみ定義されていることにも注意してください。そして、その後に呼び出す必要はありませんval()-それはフォーム要素の値を取得するためです。

于 2012-12-22T02:25:39.123 に答える
1

あなたの getElementById は、必要のない javascript では間違ってい#ます。jQuery を使用している場合は、代わりにこのようにします (必要ないため、.val() も削除しました)。

$('#main_body').delegate('#element_240','keyup mouseout change', function(e){

    var temp = $(this).attr("id").split('_');
    var element_id = temp[1];

    var price = $('#li_273').data("pricevalue");

    var ordered = $(this).val();

    price_value = parseFloat(price_value);
    if(isNaN(price_value)){
        price_value = 0;
    }

    $("#li_273").data("pricevalue",price_value);
    calculate_total_payment();          
}); 
于 2012-12-22T02:21:28.050 に答える
1

document.getElementById('#li_273').data("pricevalue").val();する必要がありますjQuery('#li_273').data("pricevalue").val();

繰り返しますが、変数price_valueは存在しませんprice

元:

$('#main_body').delegate('#element_240','keyup mouseout change', function(e){

    var temp = $(this).attr("id").split('_');
    var element_id = temp[1];

    var price = $('#li_273').data("pricevalue").val();

    var ordered = $(this).val();

    var price_value = parseFloat(price);
    if(isNaN(price_value)){
        price_value = 0;
    }

    $("#li_273").data("pricevalue",price_value);
    calculate_total_payment();          
}); 
于 2012-12-22T02:23:09.430 に答える
1

document.getElementById('#li_273')が問題です。メソッドはハッシュを認識しません。そのメソッドを使用して要素 ID を取得したい場合は、試してみるdocument.getElementById('li_273')とうまくいきます。

それ以外の場合は、すべて jQuery を使用します。

于 2012-12-22T02:23:15.273 に答える