1

我有 7 个下拉菜单,类名 =“dd”。我有 7 个类名 =“tt”的文本框。每个文本框对应于每个下拉菜单。现在,我必须检查

if(dropdown value is equal to 1)
    text box can not be empty.

所以要做到这一点,我正在做的事情:

function checkOpenHours() {
        if ($('.dd').val() == 1 && $('.tt').val() == "") {

                alert("Please select an opening hour.");
                return false;

        }
    }

我正在调用这个函数

<asp:Button ID="btnSave" runat="server" Text="Update hour" Height="35px" 
        onclick="btnSave_Click" OnClientClick="return checkOpenHours()"/>

但问题是,这只适用于第一个下拉列表和文本框。它不适用于其他 6 个下拉列表和文本框 ..!!

我究竟做错了什么??有什么帮助吗?

4

2 回答 2

2

.val()方法从 jQuery 对象中的第一个元素返回值。

你可以这样做:

function checkOpenHours() {
    var $dd = $('.dd'),
        $tt = $('.tt'),
        i;

    for (i = 0; i < $dd.length; i++) {
        if ($dd.eq(i).val() == 1 && $tt.eq(i).val() == "") {
            alert("Please select an opening hour.");
            return false;
        }
    }
}

我在那里所做的首先将$('.dd')and的结果$('.tt')放入变量中,因为尽管在循环中使用$('.dd')and$('.tt')会起作用,但它会效率低下,因为它会在每次迭代时重新创建它们(完成 DOM 访问)。然后我使用该.eq()方法获取当前i索引处的元素。

我使用的是标准for而不是 jQuery .each(),因为它可以很容易地从外部函数返回。

于 2012-08-16T09:14:43.720 回答
1

val()只返回 jQuery 集合中第一个元素的值。

您可能应该使用.each()它。

就像是

var allOkay = true;
$('.dd').each(function(id, item) {
    var $dropDown = $(item);
    var $textbox = $dropDown.siblings('.tt') // You'll need to change this according to your HTML!

    if ($dropDown.val() == 1 && $textbox.val() == '') {
        allOkay = false;
    }
});
if (!allOkay) {
    alert("Ze opening hourz! You did not enter zem!")
}
于 2012-08-16T09:17:28.143 回答