2014-11-29 3 views
1

Мне нужно вывести сумму в текстовое поле независимо от того, какой пользователь выбирает в раскрывающемся меню. У меня есть эти строки кода, но он не меняет ответ. Например, если пользователь выбирает A, тогда ответ будет показан в текстовом поле, если он выбрал B, будет показан другой ответ.Выход текстового поля, который зависит от выбора в выпадающем списке

сценарий

$(function(){ 
    $('select[name="Menu"] == A').change(function(){ 
     var textId= $(this).data('text'); 
     $('#'+textId).val("$186.00"); 
    }); 
}); 

$(function(){ 
    $('select[name="Menu"] == B').change(function(){ 
     var textId= $(this).data('text'); 
     $('#'+textId).val("$200.00"); 
    }); 
}); 

HTML

<select name="Menu" data-text="inptxt1"> 
    <option value=""></option> 
    <option value="A">A</option> 
    <option value="B">B</option> 
    <option value="C">C</option> 
    <option value="D">D</option> 
</select> 
</select> 

<input type="text" value="$0.00" name="inptxt1" id="inptxt1" readonly/> 
+0

и каков ваш вопрос? – ashkufaraz

+0

Что случилось с моим скриптом ???или возможно, что я могу использовать условное заявление здесь? потому что ответ в текстовом поле не изменится, хотя я выбрал другой вариант в раскрывающемся меню. –

ответ

2

Чтобы исправить код, который вы хотите слушать change события на SELECT элемент, а не OPTION. Это особенно легко с JQuery, потому что вы можете использовать .val(), чтобы получить выбранное значение, когда оно меняется, как это:

$("select[name='Menu']").change(function() 
{ 
    var selectedValue = $(this).val(); 
    // do stuff with selectedValue (in this case 'A', B', 'C', etc.) 
}); 

Вы обычно хотите, чтобы информацию о ценах, которая может изменяться с течением времени, чтобы быть динамическими и -driven, а не жестко закодирован в условный оператор или разметку.

Прокрутите страницу вниз и нажмите «Запустить сниппет», чтобы увидеть это в действии. Это показывает, как несколько вариантов влияют на стоимость, которая звучит так, как вы в конечном итоге после.

// dynamic product data comes from server (for example, on initial load or via AJAX) 
 
var products = [{ 
 
    Code: 'A', 
 
    Price: 100.00, 
 
    Description: 'Large' 
 
}, { 
 
    Code: 'B', 
 
    Price: 125.00, 
 
    Description: 'X-Large' 
 
}, { 
 
    Code: 'C', 
 
    Price: 150.00, 
 
    Description: 'XX-Large' 
 
}, { 
 
    Code: 'D', 
 
    Price: 1000.00, 
 
    Description: 'WTF-Large' 
 
}]; 
 

 
function RefreshProductInfo() { 
 
    var qty = parseInt($("#ddlQty").val()); 
 
    var productCode = $("#Menu").val(); 
 
    var items = $.grep(products, function(item) { 
 
    return item.Code === productCode; 
 
    }); 
 
    if (items.length === 1) { 
 
    var product = items[0]; 
 
    } else { 
 
    product = { 
 
     Price: 0.0 
 
    }; 
 
    } 
 
    $("#lblPrice").text(product.Price.toFixed(2)); 
 
    var cost = product.Price * qty; 
 
    $("#lblCost").text(cost.toFixed(2)); 
 
} 
 

 
// populate products options 
 
$.each(products, function(idx, item) { 
 
    $("#Menu").append($("<option></option").val(item.Code).text(item.Description)); 
 
}); 
 

 
// populate qty options 
 
var maxQty = 10; 
 
var stringBuffer = []; 
 
for (var i = 0; i < maxQty; i++) { 
 
    stringBuffer[i] = "<option>" + (i + 1) + "</option>"; 
 
} 
 
$("#ddlQty").on("change", RefreshProductInfo).html(stringBuffer.join()); 
 
$("#Menu").on("change", RefreshProductInfo);
* { 
 
    font-family: "Segoe UI", Arial, "Sans serif"; 
 
    font-size: 14px; 
 
} 
 
LABEL { 
 
    display: inline-block; 
 
    width: 100px; 
 
    padding: 4px; 
 
    text-align: right; 
 
} 
 
SPAN { 
 
    color: #333; 
 
    padding: 4px; 
 
    font-weight: bold; 
 
    display: inline-block; 
 
    width: 100px; 
 
    text-align: right; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p> 
 
    <label for="Menu">Size:</label> 
 
    <select id="Menu"> 
 
    <option value="">[Choose size]</option> 
 
    </select> 
 
</p> 
 
<p> 
 
    <label for="lblPrice">Unit price:</label> 
 
    $<span id="lblPrice">0.00</span> 
 
</p> 
 
<p> 
 
    <label for="ddlQty">Qty:</label> 
 
    <select id="ddlQty"></select> 
 
</p> 
 
<p> 
 
    <label for="lblCost">Gross cost:</label> 
 
    $<span id="lblCost">0.00</span> 
 
</p>

+0

Stackoverflow: задайте вопрос о jquery, получите веб-приложение для ответа. блестящий! – gabereal

-1

Я не думаю, что 'select[name="Menu"] == A' является юридическим Селектор JQuery. Я предлагаю сделать селектор, который просто находит выпадающее меню, а затем проверку на значение, которое вы можете сделать в одной функции:

$('select[name="Menu"]').change(function() { 
    var textId = $(this).data('text'); 
    var textValue; 
    if $(this).val() == "A" 
    textValue = "$186.00"; 
    else if $(this).val() == "B" 
    textValue = "$200.00"; 
    end 
    $('#' + textId).val(textValue); 
}); 
+0

, если есть другое условие ... вроде, если '$ (this) .val() ==" A "|| «1» 'и будет выход в txtbox1 и txtbox2, но разные ответы. это правильно, если я так выразился '$ (this) .val() ==" A "|| "1" document.getElementById ("inptxt1"). InnerHTML = "$ 186.00"; document.getElementById ("inptxt2"). InnerHTML = "$ 200.00"; ' –

+0

На самом деле' select [name = "menu"] '* is * действительный селектор jQuery. –

+0

Конечно, @God, селектор, который вы дали, в порядке, это версия с '==', которая выглядит неправильно для меня. –

0

Вы должны обнаружить изменения на выбор, а не вариант.

Fiddle

http://jsfiddle.net/ghopkins/o43dnbgh/

Script

$(function(){ 
    $('select[name="Menu"]').change(function(){ 
     var textId= $(this).data('text'); 
     var price = $("option:selected" , this).data('price'); 
     $('#'+textId).val(price); 
    }); 
}); 

HTML

<select name="Menu" data-text="inptxt1"> 
    <option value=""></option> 
    <option value="A" data-price="$186.00">A</option> 
    <option value="B" data-price="$200.00">B</option> 
    <option value="C" data-price="$214.00">C</option> 
    <option value="D" data-price="$228.00">D</option> 
</select> 

<input type="text" value="$0.00" name="inptxt1" id="inptxt1" readonly/> 

Отредактировано, чтобы вернуть атрибуты данных, глупый me ..

+0

Простой простое решение. +1 – Sid

+0

как насчет, если есть еще один вариант в «А»? Например, есть два выпадающих меню. как будет выглядеть код, если условие аналогично этому, если выбрано «A», а в другом выпадающем меню «1» выбрано, то вывод будет показан в текстовом поле. его, как вывод, будет отображаться только тогда, когда два выпадающего списка станут истинными. –

+0

Другой способ, которым у вас было, было лучше (с атрибутами данных). Причина: если бы это была система электронной коммерции, вы не отправляли цену с клиента на сервер; цена будет установлена ​​на сервере, и клиент просто даст код (A, B и т. д.). В противном случае клиент может обмануть запрос POST и передать «0.0» за цену. Использование атрибутов данных было более четким разделением логики. Тем более, что цена - это валютная сумма, и если вы хотите интернационализировать это веб-приложение, вы бы не хотели привязываться к валюте США (например). – nothingisnecessary

-1

Я не думаю, что его необходимо поместить атрибут данных в опции выбора. просто используйте значение для денежного значения и текстовое поле html для текста опции.

Fiddle

<select name="Menu" data-text="inptxt1"> 
    <option value=""></option> 
    <option value="$186.00">A</option> 
    <option value="$200.00">B</option> 
    <option value="$214.00">C</option> 
    <option value="$228.00">D</option> 
</select> 

<input type="text" value="$0.00" name="inptxt1" id="inptxt1" readonly/> 

JavaScript:

$(function(){ 
    $('select[name="Menu"]').change(function(){ 
     var textId= $(this).data('text'); 
     var price = $("option:selected").val(); 
     $('#'+textId).val(price); 
    }); 
}); 
+0

Я отредактировал свой вопрос, чтобы избавиться от атрибутов данных, хорошая точка. –

+0

это не фиксированное значение. параметр «A» в выпадающем меню1 имеет много значений. на самом деле есть второе раскрывающееся меню в каждом варианте в выпадающем меню1. –

+0

Нет, нет, это плохой стиль. Во-первых, два варианта могут иметь одинаковую цену, и в этом случае 'значение' является двусмысленным. Значение должно быть кодом продукта, который вы отправляете на сервер (возможно, помимо количества); цена является атрибутом продукта и должна быть доступна только для чтения (слой представления), чтобы было легко показать цену в других валютах, и легко изменить цену с течением времени и т. д. – nothingisnecessary

Смежные вопросы