将验证添加到自动完成.each

时间:2015-06-05 09:17:40

标签: javascript jquery validation jquery-ui

我正在尝试在此自动完成时添加验证检查,但出于某种原因,因为它在each()块中导致了我这么多问题。

完整代码:

<input type="text" class="productOptionSerialNumber" value="@opt.SerialNumber" data-part-num="@opt.PartNumber" />
$(".productOptionSerialNumber").each(function () {
    var partNum = $(this).attr("data-part-num");
    $(this).autocomplete({
        source: "@Url.Action("SerialPartNumStockSiteAutoComplete", "Ajax")?stocksitenum=LW&model=" + $("#Form_Prod_Num").val() + "&partnum=" + partNum + "&callnum=" + $("#Form_Call_Num").val(),
        minlength: 2,
        delay: 300,
    })
});

对于此.productOptionSerialNumber函数,我无法进行验证。

我有一个以前工作的例子(见下文),但是这个特殊的功能它没有验证,我试图像以前一样添加它,但没有运气。

工作:

$(document).ready(function () {
    //$('input[name="Form.InstallType"]').on('change', function() {
    var val = $('input[name="Form.InstallType"]:checked').val();
    if (val == '1') {
        var validOptions = "@Url.Action("SerialProdNumStockSiteAutoComplete", "Ajax")?stocksitenum=LW&model=" + $("#Form_Prod_Num").val();
        previousValue = "";

        $('#abc').autocomplete({
            autoFocus: true,
            source: validOptions,
        }).change(function(){
            var source = validOptions;
            var found = $('.ui-autocomplete li').text().search(source);
            console.debug('found:' + found);
            var val = $('input[name="Form.InstallType"]:checked').val();

            if (found < 0 && val === '1') {
                $(this).val('');
                alert("You must select a value from the auto complete list!");
            } 
        });
    }
});

因此,如果我不选择自动完成,我会收到提醒。我正在尝试将此功能实现到代码的第一部分,但因为它位于.each.attr中,所以不喜欢它。

任何想法

2 个答案:

答案 0 :(得分:1)

如果没有其他信息,我不知道您在使用each()循环时遇到了什么样的问题,但是您要完成的任务肯定是可行的。

这是一个例子,希望它可以帮助你填写你最不想要的任何东西。

HTML

<label>productOption aaa:</label>
<input type="text" class="productOptionSerialNumber" value="" data-part-num="aaa" />
<br />
<br />
<label>productOption bbb:</label>
<input type="text" class="productOptionSerialNumber" value="" data-part-num="bbb" />
<br />
<br />
<label>productOption ccc:</label>
<input type="text" class="productOptionSerialNumber" value="" data-part-num="ccc" />

Jquery的

var dataFromURL = {
    'aaa':['What','Is','Up'],
    'bbb':['Nothing','Much','Bro man'],
    'ccc':['Clown','Question','Bro schmoe']
}

$(document).ready(function(){
    $(".productOptionSerialNumber").each(function () {
        var partNum = $(this).attr("data-part-num");
        $(this).autocomplete({
            source: dataFromURL[partNum],
            minlength: 2,
            delay: 300,
        }).change(function(){
            var data = $(this).autocomplete( "option" ).source; 
            var found = data.indexOf($(this).val());

            if (found < 0) {
                alert("You must select a value from the auto complete list!");
                $(this).val('');
            } 
        });
    });
});

Fiddle Example

答案 1 :(得分:0)

如果没有特别的理由它只需要在自动完成后执行(即只要有变化就可以进行验证 - 根据我的理解,旧的工作代码会发生什么),你仍然可以绑定你对$(this)的验证。

另外,您是否有理由从新代码中删除.change()?

如果原因是您无法将验证应用于每个语句中的所有内容,则需要在绑定验证之前检查唯一选择器(通常是ID,但我发现没有一个)。

此代码完成了我所描述的内容。它使用ID作为唯一选择器。如果无法向输入标记添加ID,则需要找到另一个ID。

$(".productOptionSerialNumber").each(function () {

    $(this).autocomplete({
        source: "@Url.Action("SerialPartNumStockSiteAutoComplete", "Ajax")?stocksitenum=LW&model=" + $("#Form_Prod_Num").val() + "&partnum=" + partNum + "&callnum=" + $("#Form_Call_Num").val(),
        minlength: 2,
        delay: 300,
    });

    if ($(this).attr('id') == "thisid")
        {
            $(this).bind('input propertychange',function(){ 
                alert('this code executed because the input box changed');
            });
        }
});