0

我有一个下拉月份,它根据所选输入的年份动态填充。

在此处输入图像描述

当用户单击月份下拉菜单时,将显示月份列表。 如何使用 JQuery 获取用户选择的月份值?假设下拉列表是动态填充的。

当用户单击显示的月份列表时调用此函数

$("#month").click(function() {
    var value = $(this).children("div p").val(); // return undefined
    console.log("month: " + value);
}); 

HTLM 下拉菜单

<div id="month">
    <span class="input">März</span>
    <div class="dropdown">
        <p></p>
    </div>
</div>

当用户点击下拉月份时,UpdateMonths()函数被调用并动态填充列表

$("#month span").click(function(event) {

    $("#month div").html(UpdateMonths());


    event.stopPropagation();
    if (!$(this).hasClass('disabled')) { // only open downdown when not disabled
        Dropdown($(this).parent().attr("id"));
    } else Dropdown(); // hide all dropdown menues
});

function Dropdown (element) {

    $("#month div").hide(); // hide all dropdowns
    if (element) $("#"+element+" div").toggle(); // show dropdown of specified element
}

这就是我填写清单的方式

function UpdateMonths(){
var temp = "";
    if (parseInt(Get.Year()) <= 2012){
        for (var i = 0; i < Get.Months.length; i++) {
            var monthsChain = "<p>"+Get.Months[i]+"</p>";
            temp += monthsChain;
        };
    }else{
        temp = "<p>Januar</p><p>Februar</p><p>März<p></p><p>April</p><p>Mai</p><p>Juni</p><p>Juli</p>"; 
    }
    return temp;
}
4

5 回答 5

2

你可以试试

var value = $(this).find("div p").text();

或更具体:

var value = $(this).find("div.dropdown p").text();
于 2013-07-05T08:50:28.707 回答
1

.val()用于获取表单字段的值。如果您想要通用 HTML 元素的文本内容(例如<span><p>,您需要使用.text()

$("#month").click(function() {
    var value = $(this).find('.input').text();
    console.log("month: " + value);
}); 

确保您也从下拉列表的 HTML 类中删除句点 (.) - 类必须以字母开头,而不是数字或标点符号。

于 2013-07-05T08:52:34.680 回答
1

看起来您选择的值<span>不在 中<p>,所以它应该是:

var value = $(this).children("span.input").text();

编辑:你可以这样做:

$(document).on('click', '#month', function(e) {
    if($(e.target).is('p')) {
        var value = $(e.target).text();
        console.log(value);
    }
}); 
于 2013-07-05T08:53:24.343 回答
1

我假设您想从p元素列表中选择月份。

HTML(类似于问题的结构)

<div id="month">
    <span class="input"></span>
    <div class="dropdown">
        <p>January</p><p>February</p>
    </div>
</div>

<div id="year">
    <span class="input"></span>
    <div class="dropdown">
        <p>2013</p><p>2014</p>
    </div>
</div>

jQuery,需要委托事件,因为<p>元素是动态生成的。

$("#month, #year").on('click', '.dropdown p', function() {
    var value = $(this).text();
    console.log("month: " + value);
}); 

如何将月份值设置为跨度(在上述范围内)

$(this).parent().siblings('span').text(value);

和 jsfiddle 一起玩

http://jsfiddle.net/2nuhw/4/

于 2013-07-05T09:12:01.130 回答
0

您可以将 val() 用于输入字段。使用 text() 获取文本字段。通常

并有文字。

试试这样:

var value = $(this).children("div p").text();

或者

var value = $(this).children("div p").html();

使用 html() 您可以获得属于 span 或 p 标记的任何类型的值。

于 2013-07-05T09:23:34.640 回答