0

我有一个在我的网站上使用的表单,并通过一些简单的 JQuery 验证对其进行了验证。问题是当我更改值时它并没有真正提交或做任何事情。这是我的代码:

<form id="radForm" method="post" action="events.php?type=rad">
    <div class="searchBoxLeft searchBoxRad"></div>
    <div class="searchBoxMiddle">
        <input id="radSearch" type="text" class="searchBoxInput searchBoxShort" value="<?php echo $yourradius; ?>" />
        <label class="searchBoxLabel">Mile Radius of Your Address</label>
    </div>
    <div id="radButton" class="searchBoxRight"></div>
    <div class="clearLeft"></div>
</form>

<script>
    $(document).ready(function()
    {
        var radsearchok = 0;
        //Rad search
        $('#radSearch').blur(function()
        {
            var radsearch=$("#radSearch").val();
            if(radsearch < 2){
                $('#radSearch').addClass("searchError");
                radsearchok = 0;
            }
            else if(radsearch > 50){
                $('#radSearch').addClass("searchError");
                radsearchok = 0;
            }
            else{
                $('#radSearch').addClass("searchSuccess");
                radsearchok = 1;
            }
        });
        // Submit button action
        $('#radButton').click(function()
        {
            if(radsearchok == 1)
            {            
                $("#radForm").submit();
            }
            else
            {
                $('#radSearch').addClass("searchError");
            }
            return false;
        });
        //End
    });
</script>

谁能看到这有什么问题?

4

2 回答 2

0

您需要返回并再次设置表单的 .val() 属性,否则它将采用 .val() 的原始值而不是radsearch

不确定您是否真的想更新 .val() 或者只是附加一个属性。一些选项:

就在 .blur 的右大括号之前 --> }); 添加”

$("#radSearch").val(radsearch);

或者:

使用新 ID 向表单添加隐藏输入,例如:

<input type='hidden' name='radsearchHidden' />

然后在 .blur 结束前做同样的事情:

$("#radsearchHidden").val(radsearch);

于 2013-10-23T15:01:12.017 回答
0

我对您的代码 ( http://jsfiddle.net/zdeZ2/2/ )进行了一些更改,我将在下面进行描述:

<div id="radButton" class="searchBoxRight"></div>我假设你那里有东西=><input id="radButton" class="searchBoxRight" type="button" value="rad button">

我用模糊重写了您的验证器,如下所示。正如建议的那样,它在比较之前将 radSearch 值转换为一个整数。这些更改在验证之前删除了searchErrorsearchSuccess类。我也为你做了一些优化。

//Rad search
$('#radSearch').blur(function () {
    //remove classes from previous validating
    var $this = $(this).removeClass("searchError").removeClass("searchSuccess");
    var radsearch = $this.val() | 0; //radsearch is an integer
    if (radsearch < 2 || radsearch > 50) {
        $this.addClass("searchError");
        radsearchok = 0;
    } else {
        $this.addClass("searchSuccess");
        radsearchok = 1;
    }
});

可以等效地写为:

//Rad search
$('#radSearch').blur(function () {
    var $this = $(this);
    var radsearch = $("#radSearch").val() | 0; //radsearch is an integer
    var valid = radsearch < 2 || radsearch > 50;

    $this.toggleClass("searchError", !valid)
        .toggleClass("searchSuccess", valid);
    radsearchchok = valid ? 1 : 0;
});
于 2013-10-23T15:05:10.477 回答