难以将SignalR代码合并到if语句中

时间:2013-07-09 21:52:18

标签: jquery signalr

我尝试合并以下代码

   // main chat code

    $(function () {

        var IWannaChat = $.connection.myChatHub;

        IWannaChat.client.addMessage = function (message) {
            $('#listMessages').append('<li>' + message + '</li>');
        };

        $("#sendMessage").click(function () {
            IWannaChat.server.send($('#ideaBody').val());
        });

        $.connection.hub.start();
    });

进入下面功能,但它似乎不再起作用(注意下面的功能显示当前项目状态)。

$(function () {

    $("#sendMessage").click(function () {
        $('#ideaTitle,#ideaBody').each(function () {

            var $this = $(this),
                currValue = this.value,
                trimmedValue = $.trim(currValue),
                dataValue = $this.data('default');

            if (trimmedValue.length === 0 && (trimmedValue === dataValue)) {
                var IWannaChat = $.connection.myChatHub
                IWannaChat.client.addMessage = function (message) {
                    $('#listMessages').append('<li>' + message + '</li>');
                };
                IWannaChat.server.send($('#ideaBody').val());
                $.connection.hub.start();
            } else if (trimmedValue.length === 0) {
                alert('empty');
                return false;
            } else if (trimmedValue === dataValue) {
                alert('default');
                return false;
            }
        })
    });

});

我想在提交前验证2个字段 - 如果2个字段符合验证要求,那么我想发送消息。我出错的任何想法?

2 个答案:

答案 0 :(得分:1)

启动并向集线器发送消息的代码是错误的。

if (trimmedValue.length === 0 && (trimmedValue === dataValue)) {
    var IWannaChat = $.connection.myChatHub
    IWannaChat.client.addMessage = function (message) {
        $('#listMessages').append('<li>' + message + '</li>');
    };
    IWannaChat.server.send($('#ideaBody').val());
    $.connection.hub.start();
}

请注意,您甚至在开始连接之前尝试发布到集线器。

我建议您将代码更改为;

if (trimmedValue.length === 0 && (trimmedValue === dataValue)) {
    var IWannaChat = $.connection.myChatHub
    IWannaChat.client.addMessage = function (message) {
        $('#listMessages').append('<li>' + message + '</li>');
    };    
    $.connection.hub.start().done(function () {
        IWannaChat.server.send($('#ideaBody').val());
    });
}

这种连接已经启动,只有在完成后才会尝试调用send方法。

答案 1 :(得分:0)

trimmedValue.length === 0 && (trimmedValue === dataValue)

您可能想要检查这两个是否都是 false ,而不是真实。

或者只是将其移至最终else


此外,所有代码都将执行两次;每轮each()

一次