【问题标题】:Check the conditions every time after function has been called每次调用函数后检查条件
【发布时间】:2015-05-02 19:46:19
【问题描述】:

我写了一个函数 show() - 它显示隐藏的 id 类(我知道有 jquery 和其他方法可以做到这一点,但我想要这样)。

//-------------------------
// Function show()
//-------------------------
/**
 * Changes element class name from hide to show in parent element [ default: content ] and hides every other shown classes in that parent element.
 * @param { string } id || none to show  
 * @param { string } parent element id, if provided changes default [ optional ]
 * @params { string } more elements id's to be shown [ optional ]
 * @return { void } changed classes names
**/

我有 html 选择:

<select name="productName" id="productName">
    <option value="none" selected>Choose product</option>
    <option value="product01">product01</option>
    <option value="product02">product02</option>
    <option value="product03">product03</option>
</select>

我有一个事件监听器,它显示通常隐藏的 div 集:

document.getElementById( 'productName' ).addEventListener( 'change', function() {
    if( document.getElementById( 'productName' ).value != 'none' ) {
        if( document.getElementById( 'productName' ).value != 'none' && document.querySelectorAll( '.show' )[ 1 ].id ) show( document.querySelectorAll( '.show' )[ 1 ].id, 'content', 'showProductData' );
    }
} );

当用户更改选择的值时,我的条件完美运行,它显示了它应该做什么。但是用户可以点击一个链接,该链接再次触发 show() 函数并改变他的视图,然后我的问题就出现了。

select标签的onchange事件,很明显,当用户点击锚点并改变页面内容时不会触发。

所以我需要检查是否调用了 show() 函数,如果是则再次检查以下条件:

    if( document.getElementById( 'productName' ).value != 'none' && document.querySelectorAll( '.show' )[ 1 ].id ) {
        show( document.querySelectorAll( '.show' )[ 1 ].id, 'content', 'showProductData' );
    }

是否可以在不干扰 show() 函数的情况下做到这一点?

当然 setInterval 来检查这个条件做的事情,但它会改变每个间隔时间显示的内容。

每次调用 show() 函数后,我只需检查一次此条件。 也许有一些棘手的方法可以让事件监听器进入函数?类似:

show().addEventListener( 'called', function () { above condition } );

或任何其他方法在每次调用函数 show() 后检查 select 标记的值?

编辑。我不会删除所有帖子,但可能我应该删除。我会尽量澄清我的问题。

从清晰和直接的角度来看,我的示例可能与我的问题无关。

每次调用该函数,并且每次用户单击链接或从选择标签中选择某些内容时都会调用该函数,我需要检查条件。 虽然使用 select 标签,您只需要添加“onchange”事件侦听器,但我不知道如何在用户单击链接时检查此条件,页面不会重新加载 - 它只显示或隐藏一些类。 我无法检查“onclick”函数中选择字段的值,因为我自动为所有链接创建了所有“onclick”函数。

所以实现我的目标的唯一方法是为函数添加某种事件侦听器,每次调用函数时都会检查条件并执行某些操作。

【问题讨论】:

    标签: javascript function conditional-statements


    【解决方案1】:

    如果我理解正确,您想在动态更改值时触发更改事件吗?很简单。

    var elem = document.getElementById('productName');
    //Do what you need to do to change value.
    var event = new Event('change');  // Create a new event
    elem.dispatchEvent(event); // Fire the event on the element.
    

    【讨论】:

    • 感谢您的快速回答。这将非常有用,但在我的情况下它有点复杂。当用户选择某些东西时触发事件 - 并且一切正常,但用户可以通过单击与此选择无关的链接来更改他看到的内容,并且链接激活 show() 功能 - 这就是我需要的原因向函数本身添加一些事件侦听器,因为我需要再次检查选择的值和条件。我知道它被扭曲了,所以我请求你的宽容——我真的需要它。也许我可以扩展示例以更好地展示它。
    • Hrm,那我不明白你想要什么...如果你能在你的文字上放一些样本,那会更好理解。请编辑您的问题以在示例中包含按钮,并使用 cmets 告诉我们您想要在哪里发生什么。
    • 我试图再澄清一点。感谢您的关注。
    • 我认为你从错误的角度来理解它......我的建议应该可以正常工作。如果您需要在每次调用函数时执行/检查某些内容,只需在函数中执行此操作!如果是因为当用户单击按钮时您的 onChange 事件未触发,请使该按钮触发 onChange 或运行与 onChange onChange 相同的功能...
    • 是的,谢谢你,你说得对,你的想法是正确的,谢谢你的解决方案。只是我的问题是,由于我的页面很复杂,因此每次调用该函数时考虑检查该函数比在 onClick 操作上触发 onChange 事件要容易得多。
    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多